@kyanny's blog

My life. Opinions are my own.

Twitter にも書いたけど改めて書く。

Ruby の Fiber がわからないので Fiber を使ったソースコードが読みたいという話をしたら Goliath というウェブサーバを教えてもらったのでソースを読んでみたというか眺めてみた。そこで自分がイベント駆動とコルーチンについて正しく理解できていないことを再認識した。

今の時点での自分の理解はこうだ。イベント駆動のライブラリを利用するとシングルプロセス・シングルスレッドであっても並列に動作するプログラムが書ける。しかしイベント駆動は特有のプログラミング手法を使う必要があり、手続き的な書き方ができず、処理の流れが追いづらいコードになってしまう。そこでコルーチンという「一連の処理を束ねて抽象化する仕組み」を使い、コールバック・スタイルを隠蔽することで見た目上は手続き的なコードだけど内部的にはイベント駆動の恩恵にあずかれるプログラムを書けるようにする、というのが、イベント駆動とコルーチンを併用する理由である。

イベント駆動については一応自分の頭の中にイメージが出来ているけど、コルーチンはまだピンときていない。最近のるびまの記事はわかりやすくて、特に Proc との比較はなるほどと思ったけど、まだ腑に落ちていないというか、消化できていないというか。処理の中断ということがうまくイメージできていないんだと思う。で、コルーチンがよくわかっていないので、コルーチンを使ったプログラムもわからない。それを使う理由が理解できない。

まずはイベント駆動について正しく理解する必要があるなとも思ったので EventMachine についても改めて調べてみた。レポジトリにチュートリアルがあって、チャットサーバの実装を充実させていくという感じだったのだけどこれがとてもわかりやすいというか綺麗だった。実際は完成版を先に読んでしまったけど、それでも読みこなせるほど理解しやすかった。 EventMachine はソースコードもかなり多いし、ドキュメントも多いので身構えてしまうけど、単に使うだけなら思ったよりもとっつきやすいのかなと思った。