Parallel.ForEach是否限制活动线程的数量?
给出以下代码:
var arrayStrings = new string[1000];Parallel.ForEach<string>(arrayStrings, someString =>
{
DoSomething(someString);
});
所有1000个线程会几乎同时生成吗?
回答:
不,它不会启动1000个线程-是的,它将限制使用的线程数。并行扩展会根据您实际拥有的核心数量 和
已经繁忙的核心数量使用适当数量的核心。它为每个内核分配工作,然后使用一种称为 工作窃取
的技术来使每个线程有效地处理自己的队列,并且在真正需要时仅需要执行任何昂贵的跨线程访问。
看一看在PFX团队博客的 负载 有关如何分配工作的信息和各种其他主题。
请注意,在某些情况下,您也可以指定所需的并行度。
以上是 Parallel.ForEach是否限制活动线程的数量? 的全部内容, 来源链接: utcz.com/qa/401998.html