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

时间:2020-03-06 14:45:44  来源:igfitidea点击:

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

maxWorkerThreads="25" 
maxIoThreads="25"

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

解决方案

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

之所以将I / O线程放在一边是因为它们将进行I / O(顾名思义),并且可能必须等待"很长"的时间段(几百毫秒)。还可以优化它们,并以不同方式使用它们,以利用Windows内核中的I / O完成端口功能。单个I / O线程可能正在管理多个完成端口以维持吞吐量。

Windows具有许多处理I / O阻止的功能,而ASP.NET/.NET具有"线程"的简单概念。通过使用OS中更多的非托管线程功能,ASP.NET可以针对I / O进行优化。我们不希望一直为每个线程执行此操作,因为我们失去了.NET提供的许多功能,这就是为什么在使用线程的方式之间存在区别的原因。

辅助线程是发生常规"工作"或者仅执行简单代码/处理的线程。工作线程不太可能阻塞太多或者等待任何事情,并且运行时间短,因此需要更积极的调度以最大化处理能力和吞吐量。

[编辑]:我还找到了与以下问题特别相关的链接:
http://blogs.msdn.com/ericeil/archive/2008/06/20/windows-i-o-threads-vs-managed-i-o-threads.aspx

只是添加到乍得人...
好像I / O线程是ASP.NET服务请求的旧方法,

"Requests in IIS 5.0 are typically
  serviced over I/O threads, or threads
  performing asynchronous I/O because
  requests are dispatched to the worker
  process using asynchronous writes to a
  named pipe."

与IIS6.0相比,此更改。

"Thus all requests are now serviced by
  worker threads drawn from the CLR
  thread pool and never on I/O threads."

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