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

给出以下代码:

var arrayStrings = new string[1000];

Parallel.ForEach<string>(arrayStrings, someString =>

{

DoSomething(someString);

});

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

回答:

不,它不会启动1000个线程-是的,它将限制使用的线程数。并行扩展会根据您实际拥有的核心数量

已经繁忙的核心数量使用适当数量的核心。它为每个内核分配工作,然后使用一种称为 工作窃取

的技术来使每个线程有效地处理自己的队列,并且在真正需要时仅需要执行任何昂贵的跨线程访问。

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

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

以上是 Parallel.ForEach是否限制活动线程的数量? 的全部内容, 来源链接: utcz.com/qa/401998.html

回到顶部