[問題] 多執行緒效率

作者: 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