Erlang using Linux native threads - a waste of space
Sat Sep 2 23:11:38 CEST 2006
On Tuesday 29 August 2006 15:47, you wrote:
> On Tue, 29 Aug 2006, lang er wrote:
> > If OS support erlang's lightweight process in kernel, many programming
> > languages could have erlang's concurrent capability.I think it is not
> > impossible.
> The reason that Erlang processes are lightweight is that they do not
> require a context switch from userland -> kernel -> userland in order to
> schedule the next thread. Erlang can rely on the properties of the
> language, specifically no shared mutable data, in order to isolate
> processes from each other. The kernel must use the CPU's virtual memory
> support to do this, because it cannot make assumptions about the languages
> used to write userland processes, and switching pages tables is expensive.
Linux does not switch the page tables if the new process has the same
memory map as the previous - i.e. an thread.
But you still have the cost of checking that together with entering/leaving
the kernel. In addition to this the kernel needs to store thread information
and a (kernel) stack.
The stack is a problem when executing in kernel, as all threads will do.
- It can not be placed in user memory (another concurrently executing thread
might modify it - by accident or not... Causing severe corruptions).
- It needs to be big enough to store data from all possible kernel callchains
including local variables - how big does it need to be???
- As an optimization it does hold the thread information for quick access
Kernel 2.4 uses 8 kB stacks,
this has been optimized to 4 kB in 2.6 on i386 architectures, by
using option CONFIG_4KSTACKS, possible since 2.6 has independent
interrupt stack, exception stack..., x86-64 bit architecture could thus
continue to use an 8 kB stack.
The task description alone (stored in the stack) is about 1.7 kB
Good information at (over one year old...)
More about threads
In addition to this all threads needs a userspace stack too.
Saw some Erlang numbers earlier but I can not find it.
Note: nothing needs to be stored per Erlang process in kernel.
More information about the erlang-questions