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

时间:2008-09-26 02:27:00

标签: asp.net multithreading web-config processmodel

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

maxWorkerThreads="25" 
maxIoThreads="25"

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

2 个答案:

答案 0 :(得分: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-i-o-threads-vs-managed-i-o-threads.aspx

答案 1 :(得分: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