作者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://www.ptt.cc/bbs/C_Sharp/M.1454507190.A.22B.html
※ 編輯: ozone (140.112.125.94), 02/03/2016 21:51:17
→ ssccg: Task Parallel Library 02/03 22:49
→ ssccg: 底層的作法是用thread pool + fork/join 02/03 22:51
→ ssccg: 不要自己一直new thread... 02/03 22:51
→ ozone: 謝謝!! 02/04 01:36
→ ozone: 原本開啟很多Thread 可以讓CPU跑到100% 但改用Task之後 02/04 10:48
→ ozone: 新的執行緒大概只多10個而已 CPU也跑30~40%而已... 02/04 10:48
→ ozone: 有辦法加速嗎?? 02/04 10:48
→ ozone: 啊 我知道問題在哪了 我把Task.Start和Wait一起擺在foreach 02/04 12:11
→ ozone: 先foreach Start完 再WaitAll就讓CPU跑到100%了 02/04 12:11
→ fatrabitree: Parallel.For/Foreach 02/04 15:31