27

查看 Web.Config 中的 processmodel 元素,有两个属性。

maxWorkerThreads="25" 
maxIoThreads="25"

工作线程和 I/O 线程有什么区别?

4

2 回答 2

26

基本上不是很多,这都是关于 ASP.NET 和 IIS 如何分配 I/O 等待对象以及管理网络通信和传输数据的争用和延迟。

I/O 线程被搁置一旁,因为它们将执行 I/O(顾名思义)并且可能必须等待“长时间”(数百毫秒)。它们还可以进行优化和以不同方式使用,以利用 Windows 内核中的 I/O 完成端口功能。单个 I/O 线程可能正在管理多个完成端口以维持吞吐量。

Windows 有很多处理 I/O 阻塞的功能,而 ASP.NET/.NET 有一个简单的“线程”概念。ASP.NET 可以通过使用操作系统中更多的非托管线程功能来优化 I/O。您不希望一直对每个线程都这样做,因为您失去了 .NET 为您提供的许多功能,这就是为什么线程的使用方式之间存在区别的原因。

工作线程是发生常规“工作”或仅发生普通代码/处理的线程。工作线程不太可能阻塞很多或等待任何东西,并且运行时间很短,因此需要更积极的调度来最大化处理能力和吞吐量。

[编辑]:我还发现了这个与这个问题特别相关的链接:http: //blogs.msdn.com/ericeil/archive/2008/06/20/windows-io-threads-vs-managed-io-threads .aspx

于 2008-09-26T02:35:57.650 回答
12

只是添加到 chadmyers... 似乎 I/O 线程是 ASP.NET 服务请求的旧方式,

“IIS 5.0 中的请求通常通过 I/O 线程或执行异步 I/O 的线程提供服务,因为使用对命名管道的异步写入将请求分派到工作进程。”

使用 IIS6.0,这已经改变。

“因此,所有请求现在都由从 CLR 线程池中提取的工作线程提供服务,而不是在 I/O 线程上。”

来源: http: //msdn.microsoft.com/hi-in/magazine/cc164128 (en-us).aspx

于 2008-09-26T03:07:42.660 回答