【发布时间】:2011-01-07 04:22:18
【问题描述】:
很难在 .NET 中找到对工作线程和 I/O 线程的详细而简单的描述
我对这个主题有什么清楚的(但在技术上可能并不精确):
- 工作线程是应该使用 CPU 进行工作的线程;
- I/O 线程(也称为“完成端口线程”)应该使用设备驱动程序来完成工作,并且基本上“什么都不做”,只监视非 CPU 操作的完成情况。
不清楚的地方:
- 虽然 ThreadPool.GetAvailableThreads 方法返回两种类型的可用线程数,但似乎没有公共 API 来安排 I/O 线程的工作。在 .NET 中只能手动创建工作线程?
- 似乎单个I/O线程可以监控多个I/O操作。这是真的吗?如果是这样,为什么 ThreadPool 默认有这么多可用的 I/O 线程?
- 在某些文本中,我读到了该回调,在 I/O 操作完成后由 I/O 线程执行触发。这是真的吗?考虑到这个回调是CPU操作,这不是工作线程的工作吗?
- 更具体地说——ASP.NET 异步页面是否使用 I/O 线程?将 I/O 工作切换到单独的线程而不是增加工作线程的最大数量究竟有什么性能优势?是因为单个 I/O 线程确实监控多个操作吗?还是 Windows 在使用 I/O 线程时会更有效地进行上下文切换?
【问题讨论】:
标签: .net multithreading iocp