Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>From my research so far, its my understanding that when a request comes in it gets put into a kernel-mode request queue. According to <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/a2a45c42-38bc-464c-a097-d7a202092a54.mspx?mfr=true" rel="nofollow noreferrer">this</a>, this avoids many of the problems with context switching when there are massive amounts of requests (or processes or threads...), providing similar benefits to evented IO. Quoted from the article: </p> <blockquote> <p>"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."</p> </blockquote> <p>So according to that, every request queue may have more than one "<a href="http://webcache.googleusercontent.com/search?q=cache:AWL9sOagVXUJ:technet.microsoft.com/en-us/library/cc735084(WS.10).aspx+worker+process&amp;cd=1&amp;hl=en&amp;ct=clnk&amp;gl=us&amp;source=www.google.com" rel="nofollow noreferrer">Worker Process</a>." (Google cache) <a href="http://www.codeproject.com/KB/aspnet/aspwp.aspx" rel="nofollow noreferrer">More on worker processes</a></p> <p>From my understanding: </p> <ul> <li>IIS Opens creates a request queue (see the http.sys api below)</li> <li>A "Web Site" configured in IIS corresponds to one Worker Process</li> <li>A Web Site/Worker Process <a href="http://madskristensen.net/post/Done28099t-use-the-ThreadPool-in-ASPNET.aspx#id_d9c9863f-d624-4ade-bdcc-0e990589380c" rel="nofollow noreferrer">shares</a> the Thread Pool.</li> <li>A thread is handed a request from the request queue.</li> </ul> <p>Here is a lot of great information about <a href="http://learn.iis.net/page.aspx/101/introduction-to-iis-7-architecture/" rel="nofollow noreferrer">IIS7's architecture</a> </p> <p>Here is some more information about <a href="http://msdn.microsoft.com/en-us/library/aa364621(v=vs.85).aspx" rel="nofollow noreferrer">http.sys</a>.</p> <ul> <li><a href="http://msdn.microsoft.com/en-us/library/ff384268(v=VS.85).aspx" rel="nofollow noreferrer">HTTP Server I/O Completion Stuff</a></li> <li><a href="http://msdn.microsoft.com/en-us/library/aa364641(v=VS.85).aspx" rel="nofollow noreferrer">Typical Server Tasks</a></li> </ul> <p>Open questions i still have: </p> <ul> <li>How the heck does IIS change the Server header if it Uses HTTP.SYS? (<a href="https://stackoverflow.com/questions/427326/httplistener-server-header-c">See this question</a>)</li> </ul> <hr> <p>Note: I am not sure if/how a "Kernel-mode request queue" corresponds to an <a href="http://en.wikipedia.org/wiki/Input/output_completion_port" rel="nofollow noreferrer">IO completion port</a>, I would assume that each request would have its own but I don't know, so I truly hope someone will answer this more thoroughly. I just stumbled on <a href="https://stackoverflow.com/questions/4577193/using-httpapi-with-i-o-completion-ports">this question</a> and it seems that http.sys does in fact use IO Completion ports, which should provide nearly all of the same benifits that evented IO (node.js, nginx, lighttpd, C10K, etc...) have. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload