21

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

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

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

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

4

1 回答 1

7

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

“每个请求队列对应一个应用程序池。一个应用程序池对应HTTP.sys内的一个请求队列和一个或多个工作进程。”

所以据此,每个请求队列可能有多个“工作进程”。(谷歌缓存)更多关于工作进程

据我了解:

  • IIS 打开创建一个请求队列(参见下面的 http.sys api)
  • IIS中配置的一个“网站”对应一个工作进程
  • 一个网站/工作进程共享线程池。
  • 一个线程从请求队列中得到一个请求。

这里有很多关于IIS7 架构的重要信息

这是有关http.sys的更多信息。

我仍然有未解决的问题:

  • 如果 IIS 使用 HTTP.SYS,它到底如何更改服务器标头?(见这个问题

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

于 2011-01-30T07:32:09.647 回答