2011年5月29日日曜日

Goroutine on App Engine

先日、待望の App Engine 上での Go 言語サポートが発表されました。
Goroutine は single thread 上で実行されるということですが、Multi-threading が利用できない他のプラットフォームと比較すると、並列性サポートが非常に楽になったと言えるのではないでしょうか。

早速 goroutine を試してみます。

以下のコードでは 3 つの goroutine が 1ms ずつ sleep しながら 5 つ数えます。(w を引き回すのは良くないかも?)



実行したときの出力結果は以下のようになりました。

Routine 0: 0
Routine 1: 0
Routine 2: 0
Routine 0: 1
Routine 1: 1
Routine 2: 1
Routine 0: 2
Routine 1: 2
Routine 2: 2
Routine 1: 3
Routine 2: 3
Routine 1: 4
Routine 2: 4
Routine 0: 3
Routine 0: 4
Done.

各 routine が interleave されて実行されている様子がわかります。
App Engine では並列性の弱さが一つの弱点である/あったと思いますが、goroutine が動作することにより楽に並列性を確保することができます。
現在 go runtime は申し込みしないと appspot.com 上で使えません。私も今申し込んでいるところです。上記のサンプルはローカルで動作させていますが、appspot.com 上でも同様に動作すると思います。

はやく experimental を抜けて実用出来るようになってほしいです。

0 件のコメント:

コメントを投稿