C# - QueuedTaskScheduler - threadCount vs maxConcurrencyLeve

本文关键字:maxConcurrencyLeve vs QueuedTaskScheduler threadCount | 更新日期: 2023-09-27 17:53:03

我从QueuedTaskScheduler.cs文档中看到了以下内容,但对我来说不是很清楚。

threadCount -要创建和用于处理工作项的线程数。
maxConcurrencyLevel -允许这个调度器工作的最大并发度。

问题- threadCount &maxConcurrencyLevel ?

C# - QueuedTaskScheduler - threadCount vs maxConcurrencyLeve

threadCount是为您的任务创建的物理线程数,这些线程将使用调度器完成。这意味着您的应用程序将创建一堆具有给定限制的线程。

线程控制。当QueuedTaskScheduler在另一个TaskScheduler之上使用时,以及与调度程序的专用线程一起使用时,优先级、公平性和并发级别控制都适用。但是,当请求专用线程时,QueuedTaskScheduler还提供了对调度器所使用的线程的非常低级的控制。

maxConcurrencyLevel是调度程序中并发执行任务的数量。这意味着调度程序将同时处理有限数量的任务。

并发性水平。在大型系统中,您可能希望控制系统不同部分的并行度。使用并行循环和PLINQ查询,您可以在每个循环或每个查询的基础上控制它,但是开箱即用的方法无法跨循环控制它,也没有内置的方法来控制任务。通过将所有相关工作调度到执行最大并发级别的TaskScheduler,可以获得该功能。

这些数字看起来很相似,但又有些不同。threadCount应该几乎等于应用程序服务器上的核数,因为从理论上讲,这有助于避免上下文切换的开销。

对于maxConcurrencyLevel,这个数字可以接近等于线程数(或线程数+ 1),也可以比它大得多,如果你的任务非常小,这样处理器就会很快完成它们。

总而言之,您应该尝试不同的组合并衡量您的系统性能。

你也可以在MSDN博客的相关文章中看到一些例子

相关文章:
  • 没有找到相关文章