memo/20110314
created 2011-03-14 modified 2011-03-21
node.js について調べてました。
最近は、開発競争で優秀な人材がブラウザ実装に関わっていると見えて、javascript(ECMAスクリプト)の処理性能向上がすごいです。
で、とうとうサーバサイドでもjavascriptが使われるようになって、node.jsという基礎ライブラリが着目されているようです。
で、node.jsについてググると...
事実と想像をごちゃごちゃに混ぜて書いてる記事を発見。
http://www.atmarkit.co.jp/fwcr/rensai2/nodejs01/01.html
イベントループ
このイベントループという技術は、C10K問題で有名になった技術です。
(略)
この問題を解決するアーキテクチャとして、イベントループが開発されました。
嘘はいかんよ。
嘘はいかん。
非プリエンプティブなイベントループのほうが、古い概念なんだよ。
マルチスレッドでスケール対応しよう、なんていう考え方は俺らからすれば驚きの新しい概念だったんだぜ。
いわゆる「リッチなハードでお気楽に高性能だそうぜ、ソフトで最適化なんて古いぜ」という、パラダイス脳の方々と、高性能ハードを何としても売りたかった方々が結託して言い出したことであって、ゲーム屋さんとか、組み込み屋さんとか、プアなハードでどこまでできるかっていう世界で食ってたひとはみんな、「それじゃ絶対うまくいかない」と思って見てたんだよ。
で、やっぱりね、っていうのが今の状況。
いつだったか、CPU屋が「ソフト屋はムーアの法則をあてにすんな」とか言い出したけど、それ自体がちゃんちゃらおかしいと。
もともと高性能なソフトの何たるかを体得してたソフト屋たちは、ムーアの法則なんか後出しじゃんけんの高飛車な発言だと思ってたのに、その尻馬に乗って金儲けをしようと某CPU屋と某OS屋が、ご大層にWebサーバだけじゃなく開発環境までつくって、若い技術者をミスリードしてくれたのが、ちょっと前までの「マルチスレッド型Webサービス」なんだよね。
で、(マルチスレッドを当てにして自分で考えないソフト屋を増やすことで)自分たちで自分たちの首を締めておいて、やっぱダメでした、という敗北宣言なんだよ。「ソフト屋はムーアの法則をあてにすんな」っていうのは。
昨今の(C10Kというキーワードに象徴される)イベントループ回顧は、マルチスレッド型がやっぱダメじゃん、ってなって古くから成功してるパターンに戻ってるだけなんだよ。
この森 俊夫さんって、多分若いかたなんじゃないかな。いろいろ勉強されてるんだろうとは思うけど、
想像と事実を混ぜて記事書くのはやめておいたほうがいいと思うよ。
自分のブログならともかく。
...
で次に、建設的な話。
俺らソフト屋はその「古い技術」に戻るだけじゃなくて、次を考えなきゃいけないんだよ。
イベントループ型の多重処理がなぜ速いかっていうと、単に「コンテキストスイッチが少ないから」だけなんじゃないんだよ。アプリ実装者自身が、そのアプリ固有の制約や特徴を見極めて、効率のよい「擬似スレッド」分割を考えるから(考えざるをえないから)速くなるんだよ。
でもそれは、大変なんだよ。お気楽にマルチスレッドとロックで処理するより。
しかも、古くからあるイベントループの仕組みそのままでは、せっかく安く手に入るようになった(擬似/実際あわせた)マルチコアのCPUを、使いきれない。
そこでどうするべきか:
(1)プログラマ自身に、並走していい処理と競合する処理の切り分けを考えさせるしかないんだよ。これは本質なんだ、って諦めて、渋々、嫌々、やるしかないんだよ。
(2)だけど全部では大変だから(複雑性爆発で手に負えなくなるから)、ある程度概念を区切って、一塊の処理群は必ず「単一のCPUコアで」「シングルスレッドのように」動くようにしてやらんといかんのよ。
その仕組みを今、俺らソフト屋は、作らないといけないの。分かるかい?