On Wed, 24 Feb 2010 21:08:02 -0500, sybrandy <[email protected]> wrote:

Norbert, you are confusing threads with fibers. OS Threads have never
been, nor will ever be, "light-weight" in any sense of the word. If they
were, no one would care about thread-pools and the like. Languages that
feature light-weight threads, such as Erlang, are actually spawning
fibers. The Erlang runtime, for example, only ever uses one D style
thread to host millions of 'logical' threads.

Actually, newer versions of Erlang now use multiple threads, typically 1 per CPU and one pool of processes and a scheduler per thread. Processes can also be moved between threads in case one is busier than the others.

Casey

I looked into this 1 or 2 years ago. Erlang was designed for the cluster, so they just use multiple processes (1 per CPU) not multiple threads. There's very little little overhead to this technique and it was a simple, elegant and trivial solution. Besides there are a lot of pitfalls to going to a true multi-threaded runtime, not the least of which is the GC. There are a lot of technical issues which make moving fibers between threads very dangerous: doing so requires you to be aware of all the operations you can't use/do and to program around them accordingly. Otherwise you end up with data races.

Reply via email to