[问题] 多执行绪效率

楼主: ozone (网球拍回家了)   2016-02-03 21:46:27
我要运算一系列的参数 用到好几层for循环
最内层要做一个耗时运算 使用新的执行绪进行此运算
for(第一层)
{
for(第二层)
{
for(第三层)
{
new Thread(()=> DoWork()).start();
}
}
}
但循环一多 新的thread也会变很多 应该会浪费很多时间在thread间切换吧?
请问大概要控制在多少个thread可以有最佳运算效率 减少整体的运算时间呢?
另外要用什么方法来控制新thread的启用呢?
=> 目前想法是用List<Thread>加入每层for loop建立的Thread instance
假设先一次启动前100个 原thread就定时检查 如果isAlive小于100
就再start后面尚未启动的thread 不知这样如何?
谢谢!!
作者: ssccg (23)   2016-02-03 22:49:00
Task Parallel Library底层的作法是用thread pool + fork/join不要自己一直new thread...
楼主: ozone (网球拍回家了)   2016-02-04 01:36:00
谢谢!!原本开启很多Thread 可以让CPU跑到100% 但改用Task之后新的执行绪大概只多10个而已 CPU也跑30~40%而已...有办法加速吗??啊 我知道问题在哪了 我把Task.Start和Wait一起摆在foreach先foreach Start完 再WaitAll就让CPU跑到100%了
作者: fatrabitree (胖兔子)   2016-02-04 15:31:00
Parallel.For/Foreach

Links booklink

Contact Us: admin [ a t ] ucptt.com