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

标签 .net multithreading definition threadpool

好的,据我了解,.NET 线程池维护了许多后台线程,准备用于某种任务。

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

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

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

工作线程:

  • QueueUserWorkItem 我想。
  • 还要别的吗?

  • 异步 IO 线程:
  • 例如,在文件流上调用 Beginxxx、Endxxx 时使用? (或网络、串口等)
  • 还要别的吗?

  • 感谢您的任何澄清,或有关该主题的良好链接。

    最佳答案

    是的,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/

    相关文章:

    ruby-on-rails - Ruby 默认是线程安全的吗?

    spring - 如何在 Spring 中通过 XML 定义 MySql 数据源 bean

    c# - NHibernate Validator 动态规则

    c# - 在不继承 DynamicObject 的情况下在对象上实现动态功能?

    c# - SaveFileDialog AddExtension 无法按预期工作

    android - 如何等待我的线程达到大于零的纬度和经度

    C# LINQ 存储 int?作为整数

    java - Android,退出/暂停应用程序,如何销毁线程

    web-services - 在 Web 服务中,端点和远程网关有什么区别

    .net - 什么是编码?当某事为 "marshalled?"时发生了什么