いった構図のベンチもその中の一つにあったんだ。ベンチが何を意味するのかと言えば先ほどのスレッド対イベントループ。その性能の差は使用メモリ量などに端的に表れていたんだ。スレッドモデルの場合ね、実行スタックをコピーする必要があるからスレッドが増えるほどメモリ使用率が上昇する。対してイベントループモデルは1プロセスのままだからメモリはそれほど食わない。この点ではイベントループが有利っていうコンテクストだ。イベントループモデルにも弱点がある。それはコードのどこかでブロックする処理が発生するとプロセス全体がストップしちゃう、つまりイベントループ自体の処理もストップしてしまい、パフォーマンスに大きく影響してしまうってことなんだ。はこの、イベントループにおけるブロックをなくそうと考えた。そもそもの始まりってわけ。このブロックしてしまう処理というのはI/Oに端的に表れていて、たとえばCPUのL1キャッシュだと3サイクル、L2で14、RAMだと250で済むんだけど、それがDISKになると41,000,000サイクルかかって、ネットワークならさらに240,000,000サイクルもかかってしまうんだ。これがどのくらいすごいのかというと、サイクルをメートル換算してみるとわかりやすい。ネットワークだとさらに地球6周分!!!このコストの比はやっぱりトンデモナイんだよね。話はズレるんだけど、イベントループを利用したモデルっていうのは今までも他の言語で既に実装されていて、例えばPythonでいうとTwisted、RubyではEventMachine、PerlではColoのAnyEventなんかもある。それらの実装ではNon-BlockingのI/Oを強制したりはしていないがために、スレッドで書かれた同様の処理をするプログラムよりも遅い場合があるんだよね。なっていたとしても不思議じゃなかった。このJSの採用というのは大きな副次的効果を生み出すことになる。ウェブアプリに関わっていた人たちって大抵は多かれ少なかれJSを使っていたからね、新規の学習コストが非常に低い。ウェブアプリ開発者なら誰でも使えるような言語だってこと。生み出した高性能のJavaScriptバインディングがすでにあった。非常に嬉しいことにV8はC++環境に組み込みやすいという利点さえある。影響力ももちろん欠かせない。して産声をあげることとなる。唐突だけど、続きはまた明日なのだ。車乗らないとついつい飲みに行っちゃうんだよね。飲んだら乗るな、乗らないなら飲め、みたいな。飲んでしまい眠くって先が書けないのである。