线程如何通过Http.sys,IIS和ASP.NET绑定到请求

时间:2011-01-29 21:46:47

标签: asp.net multithreading iis http.sys

我目前正在阅读很多关于node.js.的内容。使用每个请求模型的传统线程(Apache)和使用事件循环的服务器(Nginx,节点,Tornado)之间经常进行比较。

我想详细了解如何在ASP.NET中处理请求 - 从http.sys中一直收到它直到在ASP.NET本身处理它。我发现http.sys和IIS上的MSDN文档有点缺乏,但也许我的google-fu今天很弱。到目前为止,我找到的最好的资源是Thomas Marquardt's Blog上的帖子。

任何人都可以更多地了解这个话题,或者指出我的其他任何资源吗?

(出于这个问题的目的,我只对具有典型集成管道的IIS7感兴趣)

1 个答案:

答案 0 :(得分:7)

到目前为止,根据我的研究,我的理解是,当一个请求进入时,它会被放入内核模式请求队列中。根据{{​​3}},当存在大量请求(或进程或线程......)时,这避免了上下文切换的许多问题,从而为事件IO提供了类似的好处。 引自文章:

  

“每个请求队列对应一个   应用程序池。应用程序池   对应一个请求队列   在HTTP.sys和一个或多个worker中   流程。“

因此,根据这一点,每个请求队列可能有多个“this”。 (Google缓存)Worker Process

根据我的理解:

  • IIS Opens创建请求队列 (参见下面的http.sys api)
  • 在IIS中配置的“网站”对应于一个工作进程
  • 网站/工作进程More on worker processes线程池。
  • 线程从请求队列传递请求。

以下是有关shares

的大量重要信息

以下是有关IIS7's architecture的更多信息。

我仍有问题:


注意:我不确定“内核模式请求队列”是否/如何对应See this question,我会假设每个请求都有自己的但我不知道,所以我真的希望有人会更彻底地回答这个问题。我只是偶然发现了IO completion port,似乎http.sys实际上确实使用了IO Completion端口,它应该提供几乎所有与IO(node.js,nginx,lighttpd,C10K等)相同的好处。 。)有。