我目前正在阅读很多关于 node.js 的内容。在使用传统的每个请求线程模型 (Apache) 的服务器和使用事件循环的服务器(Nginx、node、Tornado)之间经常进行比较。
我想详细了解如何在 ASP.NET 中处理请求 - 从在 http.sys 中接收到它一直到在 ASP.NET 本身中处理它。我发现 http.sys 和 IIS 上的 MSDN 文档有点缺乏,但今天我的 google-fu 可能很弱。到目前为止,我找到的最好的资源是 Thomas Marquardt's Blog 上的帖子。 .
任何人都可以对这个话题有更多的了解,或者指出我的任何其他资源吗?
(出于这个问题的目的,我只对具有典型集成管道的 IIS7 感兴趣)
最佳答案
从我目前的研究来看,我的理解是,当请求进入时,它会被放入内核模式请求队列中。根据this ,这避免了当有大量请求(或进程或线程......)时上下文切换的许多问题,为事件 IO 提供了类似的好处。
引自文章:
"Each request queue corresponds to one application pool. An application pool corresponds to one request queue within HTTP.sys and one or more worker processes."
所以据此,每个请求队列可能有多个“Worker Process”。 (谷歌缓存)More on worker processes
据我了解:
(参见下面的 http.sys api)
这里有很多关于 IIS7's architecture 的重要信息
以下是有关 http.sys 的更多信息.
我仍然有 Unresolved 问题:
注意:我不确定“内核模式请求队列”是否/如何对应于 IO completion port ,我会假设每个请求都有自己的但我不知道,所以我真的希望有人能更彻底地回答这个问题。我只是偶然发现了this question并且似乎 http.sys 实际上确实使用了 IO 完成端口,它应该提供几乎所有与事件 IO(node.js、nginx、lighttpd、C10K 等)相同的好处。
关于asp.net - 线程如何通过 Http.sys、IIS 和 ASP.NET 与请求绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839657/