我目前正在阅读很多关于node.js.的内容。使用每个请求模型的传统线程(Apache)和使用事件循环的服务器(Nginx,节点,Tornado)之间经常进行比较。
我想详细了解如何在ASP.NET中处理请求 - 从http.sys中一直收到它直到在ASP.NET本身处理它。我发现http.sys和IIS上的MSDN文档有点缺乏,但也许我的google-fu今天很弱。到目前为止,我找到的最好的资源是Thomas Marquardt's Blog上的帖子。
任何人都可以更多地了解这个话题,或者指出我的其他任何资源吗?
(出于这个问题的目的,我只对具有典型集成管道的IIS7感兴趣)
答案 0 :(得分:7)
到目前为止,根据我的研究,我的理解是,当一个请求进入时,它会被放入内核模式请求队列中。根据{{3}},当存在大量请求(或进程或线程......)时,这避免了上下文切换的许多问题,从而为事件IO提供了类似的好处。 引自文章:
“每个请求队列对应一个 应用程序池。应用程序池 对应一个请求队列 在HTTP.sys和一个或多个worker中 流程。“
因此,根据这一点,每个请求队列可能有多个“this”。 (Google缓存)Worker Process
根据我的理解:
以下是有关shares
的大量重要信息以下是有关IIS7's architecture的更多信息。
我仍有问题:
注意:我不确定“内核模式请求队列”是否/如何对应See this question,我会假设每个请求都有自己的但我不知道,所以我真的希望有人会更彻底地回答这个问题。我只是偶然发现了IO completion port,似乎http.sys实际上确实使用了IO Completion端口,它应该提供几乎所有与IO(node.js,nginx,lighttpd,C10K等)相同的好处。 。)有。