Subscribed unsubscribe Subscribe Subscribe

単一代入制約とメッセージ通信の効率

Erlang

Eralngは一度、束縛(値の代入)をした変数の値を書き換えることが出来ないようになっている。

これが軽量プロセスの効率化に寄与していることは、想像していた(Rubyの高橋さんもそうでしょうといってた)。

つっこんで考えてなかったんですけど、Erlang-MLで

「単一代入制約(single assignment restriction)のおかけでプロセス間でデータを受け渡すときに、ポインタだけ受け渡せばよいから速いんじゃないか」

ということを書いている人がいた。

あ、そっか、そういうことか。

送信元のプロセスが、変数を書き換えることがありえないから、

ロックとか考えなくてよくて、ポインタだけ渡せばいいんですね。

なるほど。

そういえば、SMPオプションをつけると遅くなる件がみかログで報告されてます。

VMwareの仮想SMPもオーバーヘッドがあるみたいで、それより

コア数分だけシングルSPUのVMを起動するほうがいいらしいっす。

ErlangもSMPオプションをつけるより、コア数分だけ実プロセスを起動したほうが

速いってことかも。