methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

Erlangのプロセスはpreemptive

TB元で紹介されていた。(http://inforno.net/articles/2007/05/22/erlang-process)
http://www.erlang.org/ml-archive/erlang-questions/200104/msg00072.html

Erlang processes are currently scheduled on a reduction count basis.
One reduction is roughly equivalent to a function call.
A process is allowed to run until it pauses to wait for input (a
message from some other process) or until it has executed 1000
reductions.

なかなかwait状態にならないプロセスは、1000reduction 実行した時点で実行権を取り上げられる。
前の日記で「Actorモデルを実現するのに必要なプロセスには、プリエンプティブが不要」という脚注を書いたけど、Erlangのプロセスはpreemptive。

で、スゴイのは、preemptiveで優先順位に基づいたスケジューリングがされるスレッドを、超軽量に作っていること。前の日記でScalaとの比較ベンチ無いかなーって書いたけど、あった。
http://blog.so-net.ne.jp/rainyday/2007-05-20

やっぱりScalaじゃ敵わないか。でも、桁違いってほどじゃないから、あとは使い方次第かな。

週末、時間あればGNU Pth*1も合わせて比較してみよう。

*1:C言語用のuser-space threading