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

时间:2010-07-03 20:21:19

标签: .net multithreading definition threadpool

好的,据我所知,.NET Threadpool维护了许多后台线程,可以用于某种任务。

Get / SetMinThreads和Get / SetMaxThreads方法包含两个可以返回或调整的参数。

根据MSDN,这两个参数表示工作线程数和用于异步IO操作的线程数。

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

工作线程

  1. 我假设QueueUserWorkItem。
  2. 还有别的吗?
  3. 异步IO线程:

    1. 例如,在文件流上调用Beginxxx,Endxxx时使用? (或网络,串口等)
    2. 还有别的吗?
    3. 感谢您对此主题的任何澄清或良好链接。

1 个答案:

答案 0 :(得分:6)

是的,QUWI,也是委托类型的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()。如果你设法找到一个改变它们的好理由,最好是当它被困在一个地狱里,只剩一个小时就可以把飞机带回家。去过那里:))