【发布时间】: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