【问题标题】:Check the Number of threads available in ThreadPool at any time随时查看 ThreadPool 中可用的线程数
【发布时间】:2016-06-13 10:55:32
【问题描述】:

在哪里以及如何检查线程池中可用线程的代码数量。

我想要的是: 例如,如果线程池中的线程数为 10,那么在任何给定时间我都不应该使用超过 3 个线程。一旦现有线程空闲,我应该开始一个新任务,保持最大计数 3。

【问题讨论】:

  • 该管理已经由线程池完成。它使用反馈循环根据需要启动和停止新线程。只需在需要时启动任务,让线程池负责调度,这就是它的工作。
  • 为什么要“保持最大计数 3”?是requirement 还是premature optimization
  • 我不确定生产服务器上的 CPU 数量。所以从我这边来看,这是一种过早的优化。 3 不是确切的计数。根据更多细节,我可能会将其更改为 4 或 6 或 2。
  • 不要重新发明 ThreadPool.SetMaxThreads()。像这样修修补补是错误的,线程池管理器真的不需要这样的帮助。它将启动超出最佳数量的额外线程,因为它应该处理阻塞过多的 tp 线程并避免死锁。
  • ThreadPool 公开了提供该信息的方法。但是,ThreadPool 会在它认为合适的时候自动生成和销毁线程,通常旨在为每个内核提供一个可用线程。除非您确切地知道自己在做什么并且有充分的理由这样做,否则您可能不应该搞砸它。

标签: c# multithreading async-await


【解决方案1】:

ThreadPool.GetAvailableThreads 将为您提供可用线程的数量。 ThreadPool.GetMaxThreads 将为您提供最大线程数。 差异将为您提供活动线程的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2012-05-07
    • 2012-12-23
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多