金利0無利息キャッシング – キャッシングできます

 | 

2009-09-16

Coroが何故重要であるか

23:59 | Coroが何故重要であるか - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - Coroが何故重要であるか - 金利0無利息キャッシング – キャッシングできます

あるいは、継続 + I/O多重化によるアプリケーションの並列化は何故重要であるのか。

Coroは非常に重要なモジュールだ。そのことを明確にしておきたい。AnyEventは非常に良く出来たPOEの代替手段かもしれないが、Coroはもっと別の価値を提供するものだ(パラダイムの変化をもたらすものだ)。

継続でネットワークアプリケーションを並列化できる理屈は単純で

  • I/O待ちで「停止」して準備が出来たら「再開」、これを継続で実現する

という風に説明できる。

perl本体のスレッドではなくCoroのスレッドを使う意味は?と問われた場合「perlのithreadは使い物にならないから」で十分な答えになる。では他の「スレッドがまともに使える」言語においても、継続 + I/O多重化による並列化のアプローチがあるのは何故なのか。その答えは、人間にとって理解がしやすい、既存のフロー駆動型プログラミングの流儀で書かれたライブラリやアプリケーションの資産を生かしたまま、スケーラビリティを高める技術になると考えられるからだ。

マルチスレッド vs 非同期I/O の歴史

http://satoshi.blogs.com/life/2007/01/multithread.html

  • A: アプリケーション開発者がI/O待ちを回避することを意識する必要は無い。マルチスレッドでカバーすべき。
  • B: マルチスレッドは難しい/スケーラビリティの面で問題がある。非同期I/O+メッセージングを使うべき。

という対立する考え方が紹介されている。CoroやNeverBlockはこの問題に対する答えを提供しているように思える。Coroのいくつかのサブモジュールの機能で、I/O待ちが発生するコードを奪いとり、AnyEventを使った処理にすり替えるということを行っている。

これはRubyのFiberの話だが

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30827

実装した本人がFiberは「IO待ちになっても処理は切り替わらない(ブロックする)ため、ネットワークプログラミングにはおそらく利用できないでしょう。」と言っている。なのでNeverBlockのようなアプローチは想定されていない使い方なのかもしれない。Coro(のサブモジュール)やNeverBlockがやっていることは、単に「ノンプリエンプティブスレッドをプリエンプティブスレッドのように扱うハックだ」と言っても良いのかもしれない。

「スレッドが勝手に切り替わるのであれば、普通のスレッドと何が違うのか」という疑問も出てくるだろう。答えとしては、I/O多重化を透過的に行っているため、大量のコネクションを同時に扱ったときに顕著な差が出る、とか、メモリ消費量や生成コストでメリットがある、等が挙げられる。

まとめると

  • イベントフレームワークが
    • I/O監視を局所化して、高速化とスケーラビリティを高める役割を担う
    • 次にどのスレッドに切り替えたら良いのかを知っている
  • 継続(協調スレッド)が
    • それを隠蔽する
    • 動的言語の性質がそれをサポートする

ということになる。内部で行われていることはイベント駆動型プログラミングだが、Coroがこれを完全に隠蔽してしまう。これは、手続き型の文法のままでネットワークアプリケーションのスケーラビリティを確保する、最良の方法であると考えている。(全ての処理をイベント駆動で書き直す労力を惜しまないなら別だよ)

ネイティブスレッドではないので、マルチコア性能を使い切ることは無いが、PerlRubyのようなLightweight Languageで、ウェブアプリケーションを書くようなケースにおいて、過激なパフォーマンスチューニングは求められない。そこそこの速度で動けばよい。コードの読みやすさやメンテナンスのし易さの方が重要だ。自分の書いているプログラムは1プロセスでマルチコアを使い切る必要性が無いので、単純にforkして複数のプロセスを立ち上げている。

guicuimixguicuimix2009/09/17 18:13確かにマルチスレッドは普通の人間の扱うプログラミングの範囲を超える難しさだと思います。

WinterWinter2011/07/03 23:44Wow! That's a really neat aneswr!

vlkvgevlkvge2011/07/04 16:16GIRVLM <a href="http://yxphhkbtctru.com/">yxphhkbtctru</a>

mhqfovfizdpmhqfovfizdp2011/07/04 23:20yEwjSj , [url=http://mxhaptoniicl.com/]mxhaptoniicl[/url], [link=http://mdaakeycvhmf.com/]mdaakeycvhmf[/link], http://ddbggfbdgifg.com/

fxppsmfxppsm2011/07/08 22:41VAwKel , [url=http://dpmegyjfkdjw.com/]dpmegyjfkdjw[/url], [link=http://sqwdkakiakyh.com/]sqwdkakiakyh[/link], http://kundunxlzmoi.com/

LizardoLizardo2013/01/19 12:03With the bases laoedd you struck us out with that answer!

ebppbovqtebppbovqt2013/01/20 10:44T39Qvi <a href="http://hocfxwqzquew.com/">hocfxwqzquew</a>

ploibokzploibokz2013/01/21 05:37evfBpZ , [url=http://ooleoitjqsvh.com/]ooleoitjqsvh[/url], [link=http://sqftrofgvpza.com/]sqftrofgvpza[/link], http://qeckugdbaxoy.com/

jadscljadscl2013/01/21 13:17ZRyZSo <a href="http://wwlngaynalwf.com/">wwlngaynalwf</a>

bxacgtxnhfebxacgtxnhfe2013/01/22 11:52VYEH9H , [url=http://hucnqyvanduy.com/]hucnqyvanduy[/url], [link=http://styzopxcmmql.com/]styzopxcmmql[/link], http://biwnsypsnvao.com/

 |