代码之家  ›  专栏  ›  技术社区  ›  Andy

.NET线程池工作线程和异步IO线程

  •  6
  • Andy  · 技术社区  · 14 年前

    好的,据我所知,.NETThreadPool维护了许多后台线程,可以用于某些类型的任务。

    根据 MSDN

    什么类型的操作使用这些特定类型的线程?

    1. 我想是排队用户工作项目吧。

    1. 例如,在文件流上调用Beginxxx、Endxxx时使用(或网络、串口等)
    2. 还有别的吗?

    谢谢你的澄清,或者关于这个问题的好链接。

    1 回复  |  直到 14 年前
        1
  •  6
  •   Hans Passant    10 年前

    是的,还有一个委托类型的BeginInvoke()方法。BackgroundWorker是最著名的例子,它被一些班级雇用。在引擎盖下只使用代理的BeginInvoke()。

    I/O完成线程是一种非常低级的Windows功能,用于在I/O请求完成时让代码快速运行。从ReadFileEx()函数的最后一个参数可以看出,还有其他参数。托管等价物通过ThreadPool.BindHandle()公开。

    NET类的工作就是把它做好。只有少数人使用它:FileStream、PipeStream、FileSystemWatcher、Socket、SerialPort的内部工作线程和一些WCF通道支持类。

    我个人不太喜欢在API中公开这些配置细节,尤其是I/O完成线程。这有点像是被BCL的团队,一些FUD在他们这边。这些设置会影响整个程序,默认设置已经相当慷慨了。修补它们大致相当于调用GC.Collect()。如果你能找到一个很好的理由去改变它们,那最好是当你被困在地狱里,只剩下一个小时赶回家的飞机的时候。曾经去过:)