[erlang-questions] how are erlang process lightweight?
Ben Dougall
bend@REDACTED
Tue Oct 3 13:25:37 CEST 2006
Hello Ulf,
Yes, thanks -- already read it and followed the links, and asked a
previous similar question in that forum
<http://lambda-the-ultimate.org/node/1692> "what are the differences
between erlang process and pthread threads?".
Does the "What Makes Erlang Processess Tick?" thread and any of its
answers and links address what happens to local variables of each
process? The info that I said below in my question on this list was got
from that "What Makes Erlang Processess Tick?" thread. Also this was
useful: <http://www.defmacro.org/ramblings/concurrency.html> "Erlang
Style Concurrency".
This was quite interesting from "Erlang Style Concurrency": "[Erlang
processes are] very cheap to start up and destroy and are very fast to
switch between because under the hood they're simply functions."
So that seems to be the thing, so far as memory footprint goes: threads
have a stack and that stack is, as usual, made up or an indefinite
number of frames -- potentially many/infinite -- grows per new function
call. Whereas Erlang processes are tied very tightly (one to one) to
functions, and a function's memory usage amount to one frame of a
stack. So an Erlang process is limited to a frame of a stack.
Am I on the right track there? It's the memory footprint of an Erlang
process and the memory footprint of a normal thread -- comparison of
the two I'm interested in.
I still can't help feel that, if what I've just said is correct, that
the Erlang process way and the normal thread way are just two different
ways of organising the same thing and amount to the same size of memory
footprint. If you have one thread and call three functions from that
thread then you have a stack with three frames. If you want to do the
same work with Erlang processes then you'd need three Erlang processes
each using up their own frame -- so three frames. Much the same memory
footprint, just organised/named differently. I suppose you organise
your Erlang funtions/processes accordingly. If those three function
calls are often done one after the other, then don't have them as
separate functions -- have them as one function.
Any corrections of any of that would be appreciated.
Thanks, Ben.
On Tuesday, October 3, 2006, at 11:23 am, Ulf Wiger (TN/EAB) wrote:
>
> Check out the recent thread at Lambda the Ultimate:
>
> "What Makes Erlang Processess Tick?"
>
> http://lambda-the-ultimate.org/node/1742
>
> BR,
> Ulf W
>
>> -----Original Message-----
>> From: erlang-questions-bounces@REDACTED
>> [mailto:erlang-questions-bounces@REDACTED] On Behalf Of Ben Dougall
>> Sent: den 3 oktober 2006 11:31
>> To: erlang-questions@REDACTED
>> Subject: [erlang-questions] how are erlang process lightweight?
>>
>> Hello,
>>
>> I'm trying to find out how Erlang processes work / what
>> they're made of. I know they don't share their memory with
>> each other (have their own heaps), in order to communicate do
>> so by message passing that are serialised data. They run one
>> after another, per cpu/core. The schedular decides which
>> process should get to go next. They stop processing when they
>> come to a point where they're waiting for a message or after
>> they've been processing for a certain amount of time.
>> All this is handled by the language/runtime system and
>> happens within user space.
>>
>> Each process is very lightweight. I'm struggling to find out
>> how they're lightweight. They're stackless? Is that correct?
>> On the stack, with things that use them, local variables are
>> stored. What happens to a process's local variables when it's
>> switched out of control (due to coming to a point where it's
>> waiting for a message or reached its time limit)? Each
>> process must have local variables don't they? So what happens
>> to them? Where do they get stored? If you have a set of local
>> variables per process then how is each process considered so
>> lightweight? And if you don't have a set of local variables
>> per process then how can they operate reasonably -- local
>> variables persisting seem essential? A set of local variables
>> must get stored per process and if you have hundreds of
>> thousands of processes that's not so lightweight is it?
>>
>> Also how do processes correspond to functions? Is it just one
>> function per process? Processes and functions are very much
>> tied up with each other; one to one?
>>
>> Any info or pointers to things that contain info on this
>> would be much appreciated.
>>
>> Thanks, Ben.
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>
>
More information about the erlang-questions
mailing list