为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2019-10-29 13:12:37
给出以下代码:var arrayStrings = new string[1000];Parallel.ForEach<string>(arrayStrings, someString =>{    DoSomething(someString);});所有1000个线程会几乎同时生成吗?
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

在单核计算机上...集合的Parallel.ForEach分区(块)在多个线程之间工作,但是该数目是根据考虑了算法的算法计算出来的,并且似乎不断监视由线程执行的工作分配给ForEach的线程。因此,如果ForEach的主体部分调用长时间运行的IO绑定/阻塞函数,这会使线程处于等待状态,则该算法将产生更多线程并在它们之间重新分配集合。例如,如果线程快速完成并且不阻塞IO线程,例如仅计算一些数字,该算法将增加(或什至减少)线程数,使算法认为吞吐量最佳(每次迭代的平均完成时间)。


基本上,所有各种Parallel库函数后面的线程池都将确定要使用的最佳线程数。物理处理器内核的数量仅构成等式的一部分。内核数与产生的线程数之间没有简单的一对一关系。


我发现有关取消和处理同步线程的文档没有什么帮助。希望MS可以在MSDN中提供更好的示例。


别忘了,必须编写主体代码才能在多个线程上运行,以及所有通常的线程安全注意事项,该框架尚未抽象该因素……。


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 1754 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信