好的,据我了解,.NET 线程池维护了许多后台线程,准备用于某种任务。
Get/SetMinThreads 和 Get/SetMaxThreads 方法包含两个可以返回或调整的参数。
根据MSDN这两个参数表示工作线程数和用于异步 IO 操作的线程数。
什么类型的操作使用这些特定类型的线程?
工作线程:
异步 IO 线程:
感谢您的任何澄清,或有关该主题的良好链接。
最佳答案
是的,QUWI 也是委托(delegate)类型的 BeginInvoke() 方法。 BackgroundWorker 被少数几个类(class)雇用,是最著名的例子。在底层仅使用委托(delegate)的 BeginInvoke()。
I/O 完成线程是一个非常低级的 Windows 功能,用于在 I/O 请求完成时让代码快速运行。从 ReadFileEx() 函数的最后一个参数中最明显的是,还有其他参数。托管等效项通过 ThreadPool.BindHandle() 公开。
.NET 类的工作就是做到这一点。只有少数人使用它:FileStream、PipeStream、FileSystemWatcher、Socket、SerialPort 的内部工作线程和一些 WCF channel 支持类。
我个人不太喜欢在 API 中公开这些配置细节,尤其是 I/O 完成线程。 BCL 团队有点逃避现实,他们最终有些 FUD。这些设置影响整个程序,默认值已经相当大方了。修补它们大致相当于调用 GC.Collect()。如果你能找到一个很好的理由来改变它们,那最好是被困在 hell 里,只剩下一小时就能 catch 回家的飞机了。到过那里 :)
关于.NET Threadpool 工作线程和异步 IO 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172773/