2008-09-26 116 views

回答

24

基本上不是很多,这都是关于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

10

只是为了添加到chadmyers ... 好像I/O线程是老样子ASP.NET服务的请求,

“请在IIS 5.0通常 服务过I/O线程,或线程 因为 请求使用异步写入分派给工人 过程执行异步I/O s到 命名管道。“

与IIS6.0这已经改变。

“因此,所有的请求都现在从CLR 线程池,从来没有在I/O线绘制 工作线程提供服务。”

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

相关问题