http.sys、iis、asp.netを介してリクエストにスレッドがどのように結び付けられていますか

StackOverflow https://stackoverflow.com/questions/4839657

質問

私は現在、node.jsについてよく読んでいますリクエストごとの従来のスレッドモデル(Apache)を使用してサーバーと、イベントループ(Nginx、ノード、竜巻)を使用するサーバーを使用して、サーバーとの間に頻繁に比較されます。

asp.netでリクエストがどのように処理されるかについて詳細に知りたいと思います - http.sysで受け取った時点から、ASP.NET自体で処理されています。 http.sysとiisのMSDNドキュメントは少し欠けていることがわかりましたが、おそらく私のGoogle-FUは今日弱いです。これまでのところ、私が見つけた最高のリソースは投稿です トーマス・マルカートのブログ.

誰かがこのトピックにもっと光を当てたり、他のリソースを教えたりできますか?

(この質問の目的のために、私は典型的な統合パイプラインを使用してIIS7にのみ興味があります)

役に立ちましたか?

解決

これまでの私の研究から、リクエストが入ったときにカーネルモード要求キューに入れることが私の理解です。によると これ, 、これにより、大量のリクエスト(またはプロセスまたはスレッド...)がある場合、コンテキストの切り替えに関する問題の多くが回避され、イベントになったIOに同様の利点が提供されます。記事から引用:

「各リクエストキューは1つのアプリケーションプールに対応します。アプリケーションプールは、http.sys内の1つの要求キューと1つ以上のワーカープロセスに対応します。」

そのため、すべてのリクエストキューには複数のリクエストがある場合があります。労働者プロセス。 "(Googleキャッシュ) 労働者のプロセスの詳細

私の理解から:

  • IISがオープンリクエストキューを作成します(以下のhttp.sys APIを参照)
  • IISで構成された「Webサイト」は、1つのワーカープロセスに対応しています
  • Webサイト/ワーカープロセス 株式 スレッドプール。
  • スレッドには、リクエストキューからリクエストが渡されます。

ここに多くの素晴らしい情報があります IIS7のアーキテクチャ

以下に詳細があります http.sys.

私がまだ持っている未解決の質問:


注:「カーネルモード要求キュー」が次のかどうかはわかりません。 IO完了ポート, 、各リクエストには独自のものがあると思いますが、私は知りませんので、誰かがこれにもっと徹底的に答えることを本当に願っています。私はちょうどつまずいた この質問 そして、http.sysは実際にはIO完了ポートを使用しているようです。これは、io(node.js、nginx、lighttpd、c10kなど)がイベントしたほぼすべての同じベニフィットを提供するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top