C# - QueuedTaskScheduler - threadCount vs maxConcurrencyLeve
本文关键字:maxConcurrencyLeve vs QueuedTaskScheduler threadCount | 更新日期: 2023-09-27 17:53:03
我从QueuedTaskScheduler.cs
文档中看到了以下内容,但对我来说不是很清楚。
threadCount
-要创建和用于处理工作项的线程数。maxConcurrencyLevel
-允许这个调度器工作的最大并发度。
问题- threadCount
&maxConcurrencyLevel
?
threadCount
是为您的任务创建的物理线程数,这些线程将使用调度器完成。这意味着您的应用程序将创建一堆具有给定限制的线程。
线程控制。当
QueuedTaskScheduler
在另一个TaskScheduler
之上使用时,以及与调度程序的专用线程一起使用时,优先级、公平性和并发级别控制都适用。但是,当请求专用线程时,QueuedTaskScheduler
还提供了对调度器所使用的线程的非常低级的控制。
maxConcurrencyLevel
是调度程序中并发执行任务的数量。这意味着调度程序将同时处理有限数量的任务。
并发性水平。在大型系统中,您可能希望控制系统不同部分的并行度。使用并行循环和PLINQ查询,您可以在每个循环或每个查询的基础上控制它,但是开箱即用的方法无法跨循环控制它,也没有内置的方法来控制任务。通过将所有相关工作调度到执行最大并发级别的
TaskScheduler
,可以获得该功能。
这些数字看起来很相似,但又有些不同。threadCount
应该几乎等于应用程序服务器上的核数,因为从理论上讲,这有助于避免上下文切换的开销。
对于maxConcurrencyLevel
,这个数字可以接近等于线程数(或线程数+ 1),也可以比它大得多,如果你的任务非常小,这样处理器就会很快完成它们。
总而言之,您应该尝试不同的组合并衡量您的系统性能。
你也可以在MSDN博客的相关文章中看到一些例子