2011-01-29 52 views
20

我正在阅读很多关于node.js.在每个请求模型(Apache)使用传统线程的服务器和使用事件循环(Nginx,节点,Tornado)的服务器之间经常进行比较。线程如何通过Http.sys,IIS和ASP.NET绑定到请求

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

任何人都可以在这个主题上发现更多的信息,或者将我指向任何其他资源?

(对于这个问题,我只能在IIS7与典型的综合管线兴趣的目的)

+2

我的谷歌福轮番上涨http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp这可能会回答你的问题 – 2011-01-30 00:17:00

+0

这是一个很大的问题,这是我一直想知道我自己。 – Jake 2011-01-30 07:13:41

回答

7

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

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

所以据此,每个请求队列可能有多个“Worker Process”。 (谷歌缓存)More on worker processes

从我的理解:

  • IIS开幕创建请求队列 (见下面的HTTP.SYS API)
  • A “网站” 在IIS中配置相当于一个工人进程
  • 一个网站/工作进程shares线程池。
  • 线程从请求队列中提交请求。

这是一个关于IIS7's architecture

很多伟大的信息,下面是一些关于http.sys的更多信息。

开放的问题,我仍然有:

  • 如何赫克不会改变IIS服务器头,如果它使用HTTP.SYS?(See this question

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