アプリケーションサーバで非同期処理をするかしないかの分水嶺
mala さんのまとめは、わかりやすいなぁと思いました。ただ、傍論なんですが、
既存のマルチスレッド/マルチプロセスのサーバーで、常にリクエスト処理待ちの待機しているプロセスがある状態の場合は(+その並列数でCPUのパフォーマンスが劣化しない場合は)、パフォーマンスが劣化することは無いので非同期処理を使う必要が無いでしょう。実際のところ「1秒あたりに来るリクエストの最大件数」というのは予測できないので、(long-pollやstreamingをしない)普通のアプリケーションにおいても非同期処理の導入はメリットになる(と、考えている)。
非同期アプリケーションサーバーの要件と必要性について - 金利0無利息キャッシング – キャッシングできます - subtech
はちょっと気になった。私見では、非同期処理 (スレッド内での I/O 多重化) を行うべきか否か、は、クライアントとの TCP 接続において、待機時間がどの程度の割合を占めるか、という点で決定されると思う。
たとえば、TCP接続中の時間のうち99%が待機時間になるようなケースでは、CPUの処理可能な requests/sec の100倍とか、数万本の接続を同時に扱うことになる(ことができる)ので、プロセス(or スレッド)内での多重化には意味がある(かも)と思う。
#OSのスケジューラにもよるけど
でも、通常のウェブアプリケーションサーバだと、そこまで待機時間は長くないし、1 connection per thread モデルでいいと思ってる。
一方で、別の論点として、たとえば ircd のようなクライアント間のやり取りを中継するサーバを書く場合は、ユーザーランドで多重化すると書きやすい、とかそういうのはあると思う。