作者ozone (道别,下段旅程。)
看板C_Sharp
标题[问题] 多执行绪效率
时间Wed Feb 3 21:46:27 2016
我要运算一系列的参数 用到好几层for回圈
最内层要做一个耗时运算 使用新的执行绪进行此运算
for(第一层)
{
for(第二层)
{
for(第三层)
{
new Thread(()=> DoWork()).start();
}
}
}
但回圈一多 新的thread也会变很多 应该会浪费很多时间在thread间切换吧?
请问大概要控制在多少个thread可以有最佳运算效率 减少整体的运算时间呢?
另外要用什麽方法来控制新thread的启用呢?
=> 目前想法是用List<Thread>加入每层for loop建立的Thread instance
假设先一次启动前100个 原thread就定时检查 如果isAlive小於100
就再start後面尚未启动的thread 不知这样如何?
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.125.94
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1454507190.A.22B.html
※ 编辑: ozone (140.112.125.94), 02/03/2016 21:51:17
1F:→ ssccg: Task Parallel Library 02/03 22:49
2F:→ ssccg: 底层的作法是用thread pool + fork/join 02/03 22:51
3F:→ ssccg: 不要自己一直new thread... 02/03 22:51
4F:→ ozone: 谢谢!! 02/04 01:36
5F:→ ozone: 原本开启很多Thread 可以让CPU跑到100% 但改用Task之後 02/04 10:48
6F:→ ozone: 新的执行绪大概只多10个而已 CPU也跑30~40%而已... 02/04 10:48
7F:→ ozone: 有办法加速吗?? 02/04 10:48
8F:→ ozone: 啊 我知道问题在哪了 我把Task.Start和Wait一起摆在foreach 02/04 12:11
9F:→ ozone: 先foreach Start完 再WaitAll就让CPU跑到100%了 02/04 12:11
10F:→ fatrabitree: Parallel.For/Foreach 02/04 15:31