ページ

2009年11月17日

GoのConcurrency

Goが広まるかどうかはよくわかりません。Chromeと融合するというお話もあるので、少なくともGoogleは使いそうです。スレッドをばんばん作るようなサーバを作るための言語かな?と思っていましたが、Chromeに絡めてくるとはちょっと意外でした。そんなGoですが、トップページにConcurrencyが特徴の一つとしてあげられています。Language Design FAQを読むとすごいです。
multiplex independently executing functions—coroutines, really—onto a set of threads
とあって、複数のスレッドでコルーチンが動いているような感じです。
When a coroutine blocks, such as by calling a blocking system call, the run-time automatically moves other coroutines on the same operating system thread to a different, runnable thread so they won't be blocked.
とあり、スレッド(コルーチン)内で何かがブロッキングIOをコールすると、ランタイムが勝手にそれを見つけてきてくれて、他のスレッドに切り替えてくれます。
他にも、コルーチンなので、計量スレッドになるとか書かれていますが、そのへんは大しておもしろくもありません。

さて、で、上のような仕組みって、結局Pythonとかでもできなくはないし、ありきたりと言えばありきたりです。でも、これがネイティブコードになると、どうやっているのか不思議です。Goのコードを書いていると、なんとなくスクリプトっぽさを感じます。duck typingのあたりやシンタックスもそうなんですが、コンパイルして実行するのが一瞬で、適当なシェルスクリプトなり、make && ./myappみたいに書いておけば、一瞬でコンパイル、実行できます。その辺もネイティブにコンパイルして実行していると言うことを忘れさせます。

で、goroutineがどんなネイティブコードをはくかはアリエルの井上さんがレポートしてくれるでしょう。

0 件のコメント: