Erlangの軽量プロセスとマルチコア

Erlangの軽量プロセスはいわゆるグリーンスレッドなのだけど,それだとCPU数が増えても恩恵受けれないんじゃね?という疑問があって,それに対するTwitterでのまとめ.

  • 軽量プロセスをどんどん生成しても問題ないのは,Rubyなどとは違い保持しているデータが少ない.故にスイッチの処理も軽い?
  • 軽量プロセス自体がCPUなどに張り付いてるわけではなく,Erlang自体がキューを持ったネイティブスレッド(スケジューラ)を所持している.軽量プロセスは生成されたらこれらのネイティブスレッドに割り当てられることでスケールする.
  • I/Oなどのブロックするものに関しては,Asyncなスレッドプールを別途使う必要がある(参照).

こんな感じだろうか.少しすっきり.