一尘不染

Parallel.ForEach是否限制活动线程的数量?

c#

给出以下代码:

var arrayStrings = new string[1000];
Parallel.ForEach<string>(arrayStrings, someString =>
{
    DoSomething(someString);
});

所有1000个线程会几乎同时生成吗?


阅读 383

收藏
2020-05-19

共1个答案

一尘不染

不,它不会启动1000个线程-是的,它将限制使用的线程数。并行扩展会根据您实际拥有的核心数量
已经繁忙的核心数量使用适当数量的核心。它为每个内核分配工作,然后使用一种称为 工作窃取
的技术来使每个线程有效地处理自己的队列,并且在真正需要时仅需要执行任何昂贵的跨线程访问。

看一看在PFX团队博客负载 有关如何分配工作的信息和各种其他主题。

请注意,在某些情况下,您也可以指定所需的并行度。

2020-05-19