【发布时间】:2015-07-06 00:59:11
【问题描述】:
在线程池中,我设置了最大线程数。我希望有可用的工作线程数。我试过了。
ThreadPool.GetAvailableThreads(out x, out y);
使用这个,我得到的可用线程数 (x) 只是在减少。即使在他们的任务完成后,可用线程数 (x) 也没有增加。 如何获取线程池中的实际可用线程数。
【问题讨论】:
-
你想用这个完成什么?您通常不必更改这些设置。
-
为什么你设置了最大线程数?如果您试图限制执行线程的数量,这根本无济于事。它只会确保您的应用程序在压力下挂起。存在线程池,因此您无需自己管理线程,并且如果不使用,不会花费任何费用。
-
@PanagiotisKanavos 在线程池中,我想要 5 个并行线程来执行一些任务,其中我有包含任务数的长队列。我想要的是,每当这 5 个线程中的任何线程空闲时,它都会从我的任务队列中取出一个新任务。我使用的是单独的任务队列而不是线程池队列,因为我想优先处理这些任务。高优先级任务将直接获得线程,低优先级将进入队列末尾。
-
@kaustubh93 - 这不是对池进行微观管理的理由。看看
Parallel.ForEach(),也许 MaxDegreeOfParallelism=5。但先试试吧。 -
你不能通过限制整个应用程序池来做到这一点。使用具有 DOP 限制的 ActionBlock(几乎完全按照您的要求执行)或 PLINQ,或者仅使用具有一定数量的读取任务的 ConcurrentQueue。虽然,我怀疑让 .NET 完成它的工作会比限制线程数量更好
标签: c# .net multithreading threadpool threadpoolexecutor