首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parallel.For线程创建

Parallel.For线程创建
EN

Stack Overflow用户
提问于 2013-11-10 01:28:18
回答 4查看 180关注 0票数 3

我正在使用parallel.for设置:

代码语言:javascript
复制
Parallel.For(0, 4, new ParallelOptions { MaxDegreeOfParallelism = 4 }, j =>

我期望它创建4个工作线程,但是并发可视化工具只显示使用了3个工作线程。我已经尝试使用最大的并行度和处理器亲和度,但是在每个场景下只使用3个工作线程,而不是4个。干杯

EN

回答 4

Stack Overflow用户

发布于 2013-11-10 01:32:03

正如它所说的MaxDegreeOfParallelism,所以它不会超过这个值,但它也不会使用超过必要的值。

这是它在MSDN上说的

默认情况下,

和ForEach将使用底层调度器提供的线程数,因此将MaxDegreeOfParallelism从缺省值更改只会限制将使用的并发任务数。`

票数 1
EN

Stack Overflow用户

发布于 2013-11-10 01:55:37

这是设计出来的,我不记得我是在哪里读到它的,但它使用了底层的线程池,并且它只是在有处理器能力的情况下接受任务。虽然C#和F#之间的区别听起来很奇怪。

从理论上讲,它还应该取决于可用的处理器核心。如果只有一个核心,那么就不需要启动一个以上的线程。

如果你想强制它使用4,你可以编写你自己的调度器。

票数 0
EN

Stack Overflow用户

发布于 2013-11-10 02:27:04

如上所述,您只能指定最大线程数,而不能指定实际线程数。如果您有四个可用核心,并且工作负载不是微不足道的,那么所有四个都将并行运行,因为启动For的线程也用于执行工作项。

此外,Parallel.For可能会将您的输入范围分成块。它可能不会为四个项目,但如果你关心,你可以使用Parallel.Invoke()一次安排四个项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19879843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档