在 .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 线程时会进行更有效的上下文切换?