好的,据我了解,.NET 线程池维护着许多后台线程,准备用于某种任务。
Get/SetMinThreads 和 Get/SetMaxThreads 方法包含两个可以返回或调整的参数。
根据MSDN http://msdn.microsoft.com/en-us/library/system.threading.threadpool.setminthreads.aspx这两个参数分别表示工作线程数和用于异步IO操作的线程数。
哪些类型的操作使用这些特定类型的线程?
工作线程:
- 我认为是 QueueUserWorkItem。
- 还要别的吗?
异步IO线程:
- 例如,在文件流上调用 Beginxxx、Endxxx 时使用? (或者网络、串口等)
- 还要别的吗?
感谢您的任何澄清或有关该主题的良好链接。
是的,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()。如果你想找到一个很好的理由来改变它们,那最好是在你被困在地狱里,只剩下一个小时才能赶飞机回家的时候。到过那里 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)