我从QueuedTaskScheduler.cs
documentation看到了以下内容,但对我来说不是很清楚。
threadCount
- 要创建和用于处理工作项的线程数
maxConcurrencyLevel
- 此调度程序工作所允许的最大并发度。
问题 - threadCount
与...之间有什么区别? maxConcurrencyLevel
?
答案 0 :(得分:3)
threadCount
是一些用于使用调度程序完成任务的虚拟创建线程。这意味着您的应用程序将创建一组具有给定限制的线程。
线程控制。当
QueuedTaskScheduler
用于另一个TaskScheduler
之上以及与调度程序的专用线程一起使用时,优先级,公平性和并发级别控制都适用。但是,QueuedTaskScheduler
还在请求专用线程时对调度程序使用的线程提供非常低级别的控制。
maxConcurrencyLevel
是您的计划程序中同时执行任务的数量。这意味着您的调度程序将同时处理有限数量的任务。
并发级别。在大型系统中,您可能希望控制为系统的不同部分提供多少并行性。使用并行循环和PLINQ查询,您可以在每个循环或每个查询的基础上控制它,但开箱即用,无法跨循环控制它,并且没有内置的方法来控制它任务。通过将所有相关工作安排到强制执行最大并发级别的
TaskScheduler
,可以获得该功能。
这个数字看起来非常相似,但它们确实不同。线程计数应该几乎等于应用程序服务器上的核心数,因为这有助于您在理论上避免上下文切换开销。
至于并发级别,这个数字可能几乎等于线程数(或线程数+ 1),或者它可能比它大得多,如果你的任务非常小,那么处理器会这样做快。
总而言之,您应该尝试不同的组合并衡量您的系统性能。
另外,您可以在related post on MSDN blogs
上看到一些示例