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

And*_*ndy 6 .net multithreading definition threadpool

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

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

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

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

工人线程:

  1. 我猜想QueueUserWorkItem.
  2. 还要别的吗?

异步IO线程:

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

感谢您对此主题的任何澄清或良好链接.

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

  • 是的,线程池线程,与QUWI相同.工作线程,I/O线程仅由I/O完成例程(BindHandle()方法)使用. (2认同)