「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、
あまりにもクライアントの数が多くなると効率が悪化しサーバがパンクする問題のこと。
- スレッドなどのリソースを大量に消費してしまう。
- 最近は、「C10M問題」(クライアント1,000万台問題)などが出て来ている。
nginxとNode.js †
Node.js †
Node.jsの概要 †
サーバサイド JavaScript のNode.jsはノンブロッキングI/Oというモデルにより、
イベントループを止めてしまうようなブロッキングを回避し、C10K問題に対応する。
WindowsでNode.jsを使う。 †
- Unix系OS向けの非同期I/O環境(epoll/kqueue/event port)を使用する「libev」ライブラリを使用していた。
- Windows向けの非同期I/O環境(IOCP : Input/output completion port)を使用する「libuv」を開発した。
- 現在、libeio / libev に代わって libuvが、Node.js のコアとして置き換わりつつある。
2つの方式 †
イベントループ †
UIサブシステムのメッセージループと同じ意味で利用される用語だが、
Webサーバーに関するコンテキストでは、C10kに対応するアーキテクチャ用語として使用される。
- 方式
シングルスレッドでループ処理を回し、
- キューに溜まったイベントを処理していく方式。
- リクエストを1つのスレッドで受け取ることができる。
ノンブロッキングI/O †
- 簡単に、ブロッキングを防止することでイベントループの停止を防止する。
- 仕組みとしては、ざっくり、
- ワーカースレッドプールと I/O 処理がうまく協調して動き、
- スレッドを節約して動作しているクライアントに処理完了後のコールバックを返す。
という、非常に優れた方法であるらしい。
参考 †
C10k †
イベントループ †
ノンブロッキングI/O †
Node.js †
Windows, .NET †
- 非同期 I/O - Web/DB プログラミング徹底解説
Tags: :インフラストラクチャ, :Windows, :プログラミング, :.NET開発