古いネタだがめも
node.js とは何か
http://d.hatena.ne.jp/badatmath/20101020/1287587240
apache はご存じのとおりスレッド、対して nginx はイベントループ。
(中略)
スレッドモデルの場合ね、実行スタックをコピーする必要があるからスレッドが増えるほどメモリ使用率が上昇する。対してイベントループモデルは1プロセスのままだからメモリはそれほど食わない。この点ではイベントループが有利っていうコンテクストだ。ただね、イベントループモデルにも弱点がある。それはコードのどこかでブロックする処理が発生するとプロセス全体がストップしちゃう、つまりイベントループ自体の処理もストップしてしまい、パフォーマンスに大きく影響してしまうってことなんだ。
ryan はこの、イベントループにおけるブロックをなくそうと考えた。それが node.js のそもそもの始まり
(中略)
I/Oに端的に表れていて、たとえばCPUのL1キャッシュだと3サイクル、L2で14、RAMだと250で済むんだけど、それがDISKになると41,000,000サイクルかかって、ネットワークならさらに240,000,000サイクルもかかってしまう
http://d.hatena.ne.jp/badatmath/20101022/1287701281
v8(JavaScript) + libev(I/O用イベント制御ライブラリ) + libeio(スレッドプールを用いた非同期I/Oライブラリ) という node.js のベース
http://satoshun00.hatenadiary.com/entry/2012/08/02/172936
店員の視点で
- レジに空箱が持ちこまれる
- 棚まで本体を取りに行き、本体を棚から探す
- 本体を客まで持っていって会計をする
(中略)
2人目の客が商品を持ち込んだ。
この2つのモデルの違いは、ここで店員1人が客2人分の処理を行うのがイベントループモデル、
もう1人店員が出てきて会計をするのがスレッドモデルである。
(中略)
出し入れ作業(I/O)は時間がかかる。このとても時間のかかるI/Oの処理で、商品が見つかるまでじっと棚の前で待っているのがブロッキングI/Oと呼ばれるモデルである。
(中略)
商品が見つかるまで棚の前で待たずに次のお客さんの対応に回ることができる。これがノンブロッキングI/O。他の処理を行いながら、商品が見つかり次第棚から持っていき会計する処理に取り掛かる。
めも