HTTP サーバーをプログラミングしている場合、すべての HTTP 接続を独自のスレッドで処理することを検討する必要があるのはなぜですか?
イベント駆動型の HTTP サーバーは、スレッド駆動型の HTTP サーバーよりも高速でスケーラブルであるという多くの議論を読みました。(たとえば、Nginxの Ars Technica を参照してください)。それでも、世界で最も人気のあるサーバーである Apache はスレッド駆動型です。なんで?利点は何ですか?
HTTP サーバーをプログラミングしている場合、すべての HTTP 接続を独自のスレッドで処理することを検討する必要があるのはなぜですか?
イベント駆動型の HTTP サーバーは、スレッド駆動型の HTTP サーバーよりも高速でスケーラブルであるという多くの議論を読みました。(たとえば、Nginxの Ars Technica を参照してください)。それでも、世界で最も人気のあるサーバーである Apache はスレッド駆動型です。なんで?利点は何ですか?
コーディングするのは簡単です。
基本的に、言語サポート (C# や VB は次のバージョンに組み込まれる予定です) と優れたライブラリがなければ、非同期コードを書くのは困難です。不可能ではありませんし、逆立ちでできる方のコメントもあると思いますが、同期版よりは難しいです。再入可能でなければならないコードなどよりも、上から下へ実行するだけのコードを考える方がはるかに優れています。
プラットフォームによっては、最近のスレッドは非常に安価になる可能性があります。そのため、適切なプーリングを使用すると、一度にそれほど多くのリクエストを処理する必要がないサーバーでは、リクエストごとのスレッド モデルがうまく機能します。もちろん、ロングポーリング、またはリクエストを他のサービスに委任する必要があるサーバーには、戻ってくるのに「しばらく」かかる場合があります(たとえそれがわずか10分の1秒であっても)。後者のクラスのサーバーは、作業を行うために最小限の処理しか行っていないため、巨大なリクエスト レートを処理できるはずです。特にメモリの非常に無駄です。