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

27

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

maxWorkerThreads="25" 
maxIoThreads="25"

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

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-i-o-threads-vs-managed-i-o-threads.aspx


12
只是补充一下chadmyers所说的... 似乎I/O线程是ASP.NET处理请求的旧方法,
在IIS 5.0中,请求通常通过I/O线程或执行异步I/O的线程进行服务,因为请求是使用对命名管道的异步写入来分派到工作进程的。
但是,随着IIS 6.0的推出,这种情况发生了改变。
现在所有的请求都由从CLR线程池中获取的工作线程服务,而不会使用I/O线程。
来源:http://msdn.microsoft.com/hi-in/magazine/cc164128(en-us).aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接