Eralngは一度、束縛(値の代入)をした変数の値を書き換えることが出来ないようになっている。
これが軽量プロセスの効率化に寄与していることは、想像していた(Rubyの高橋さんもそうでしょうといってた)。
つっこんで考えてなかったんですけど、Erlang-MLで
「単一代入制約(single assignment restriction)のおかけでプロセス間でデータを受け渡すときに、ポインタだけ受け渡せばよいから速いんじゃないか」
ということを書いている人がいた。
あ、そっか、そういうことか。
送信元のプロセスが、変数を書き換えることがありえないから、
ロックとか考えなくてよくて、ポインタだけ渡せばいいんですね。
なるほど。
そういえば、SMPオプションをつけると遅くなる件がみかログで報告されてます。
VMwareの仮想SMPもオーバーヘッドがあるみたいで、それより
コア数分だけシングルSPUのVMを起動するほうがいいらしいっす。
ErlangもSMPオプションをつけるより、コア数分だけ実プロセスを起動したほうが
速いってことかも。