我正在尝试确定ASP.NET工作线程的角色。我的IIS 7安装默认允许最多25个工作线程,而我本来会将其设置为1.
当用户请求.aspx
页面时,我理解该请求将检索工作线程。但是该页面上每个图像的加载是否也会占用工作线程?一旦检索到图像,检索它的工作线程是否也负责将其传输给用户(通过blocking-tcp-socket?)?
答案 0 :(得分:3)
让我们来看看对ASPX页面的Web请求对用户及其浏览器的看法。
用户将浏览器导航到ASPX页面。在服务器上,IIS将其识别为ASP.NET请求并将其路由到.NET处理程序进行处理,其中包括获取工作线程,处理页面以及将生成的HTML传递回用户的浏览器。这不包括提供实际图像,JavaScript文件,CSS文件和其他外部资源 - 只需从页面本身生成的HTML返回到用户的浏览器。
当用户的浏览器呈现页面时,它将对页面上的其他资源发出额外请求 - 图像,JavaScript文件等。当IIS收到对这些文件的请求时,它会将它们作为静态内容处理,并且因此,ASP.NET处理程序(及其工作进程)不参与处理或传递内容。
请注意,您可以配置IIS以使用.NET处理程序来处理这些类型的请求,但对于静态内容,IIS不会开箱即用。
答案 1 :(得分:0)
IIS 7的安装程序在安装时包含“Common Http Features-> Static Content”。该模块负责处理静态内容,我不认为它使用任何工作线程。
虽然一个工作线程看起来有点微薄,即使对于测试服务器也是如此。如果您的代码进入一个漫长的过程(例如长查询),您将无法运行等待单个工作进程的其他页面。是什么促使您希望将其设置为1?
答案 2 :(得分:0)
我不确定您正在谈论哪个IIS版本,所以here is something我在v5.1上读了一些时间。
当使用ASPCompat和会话状态时,运行时可以将对同一会话的请求序列化为单个线程。
否则,默认情况下,如果向应用程序发出12个请求到睡眠页面,ASP.NET将使每个后续请求等待,直到前一个请求释放一个线程。您可以通过和配置设置(machine.config)控制此行为,其中并发线程数是maxWorkerThreads和minFreeThreads之间的差异。还请仔细检查这些设置是否未设置,以便您的应用程序只能同时处理一个ASP.NET请求。
答案 3 :(得分:0)
如果你的asp.net应用程序代码中有阻止调用,请单击。
否,如果您使用全部在内存中的数据回复请求。
不应该通过Asp.Net提供静态图像,像IIS或nginx这样的静态文件服务器可以更快地完成这项工作。