【发布时间】:2013-09-27 10:21:33
【问题描述】:
我想知道,当我运行 Parallel.For/ForEach 循环时将使用多少个线程。
我发现,它可以通过 MaxDegreeOfParallelism 选项进行更改。
MSDN 上的 MaxDegreeOfParallelism 帮助说 (link):
默认情况下,For 和 ForEach 将使用多少线程 底层调度程序提供,因此将 MaxDegreeOfParallelism 从 默认只限制将使用多少并发任务。
但我不知道底层调度程序提供了多少线程。
我怎样才能知道呢?
我可以使用循环运行 9999999 来测试它,但是这个测试会显示数字,而不是确定该数字的规则。
稍后编辑/添加:
我搜索了“sheduler max concurrency”,发现(在 MSDN - link),TashSheduler 类具有 MaximumConcurrencyLevel 属性,并且:
返回一个表示最大并发级别的整数。这 默认调度程序返回 Int32.MaxValue。
TaskSheduler 类被用作这些并行循环的“底层调度程序”?
【问题讨论】:
-
有趣的是,它返回常量
2147483647.. 而不是int32.MaxValue。
标签: c# multithreading .net-4.5 parallel.foreach