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

Joh*_*ohn 27 asp.net multithreading web-config processmodel

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

maxWorkerThreads="25" 
maxIoThreads="25"
Run Code Online (Sandbox Code Playgroud)

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

cha*_*ers 26

从根本上讲,并不是很多,而是关于ASP.NET和IIS如何分配I/O等待对象以及管理通过网络进行通信和传输数据的争用和延迟.

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

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

工作线程是经常"工作"或只是普通代码/处理的线程.工作线程不太可能阻塞很多或等待任何事情,并且运行时很短,因此需要更积极的调度以最大化处理能力和吞吐量.

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


Gis*_*shu 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