18

これはおそらくばかげた質問ですが、「ノンブロッキングWebサーバー」とは正確には何ですか?すべてのWebサーバーは技術的に非ブロッキングですが、そうではありませんか?それ以外の場合、それらはどのように同時接続を処理できますか?Apache2は、fork()とpthreadの組み合わせを使用してこれを実現します。Tornado(およびTwistedも)はどの程度正確に異なりますか?一連のソケットを非ボッキングモードに設定し、FDリスト(または同等のもの)を作成してから、1つの大きなselect()sys呼び出しでそれをループしますか?

このようなフレームワークはどこで使用しますか?また、Apache2(または他の一般的なサーバー)に比べてどのような利点がありますか?ありがとう

4

1 に答える 1

12

EventMachineに関するこの記事も、ヒントを与える可能性があります。

フォーク/スレッド化されたWebサーバーの伝統に浸り、数年前にウォータールー大学の研究プロジェクトの1つに参加したとき、私はかなり驚きました。さまざまなWebサーバーアーキテクチャのベンチマークを行っていて、トップパフォーマーはすべてイベントでした-駆動型サーバー。

みんなに質問をせがむと、なぜ-毎秒数十万のリクエストがある環境で、スレッド管理に関連するフォークとコンテキストの切り替えが非常に高価になるのかがすぐにわかりました(フォークは親プロセスでメモリコピーを行うため、パフォーマンスが最も低くなります)毎回)。比較すると、タイトで高度に最適化されたイベントループは、高負荷でのパフォーマンスに関しては本当に輝いています。

于 2009-09-14T04:37:35.430 に答える