[問題] 多執行緒效率

看板C_Sharp (C#)作者 (道別,下段旅程。)時間9年前 (2016/02/03 21:46), 9年前編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
我要運算一系列的參數 用到好幾層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

02/03 22:49, , 1F
Task Parallel Library
02/03 22:49, 1F

02/03 22:51, , 2F
底層的作法是用thread pool + fork/join
02/03 22:51, 2F

02/03 22:51, , 3F
不要自己一直new thread...
02/03 22:51, 3F

02/04 01:36, , 4F
謝謝!!
02/04 01:36, 4F

02/04 10:48, , 5F
原本開啟很多Thread 可以讓CPU跑到100% 但改用Task之後
02/04 10:48, 5F

02/04 10:48, , 6F
新的執行緒大概只多10個而已 CPU也跑30~40%而已...
02/04 10:48, 6F

02/04 10:48, , 7F
有辦法加速嗎??
02/04 10:48, 7F

02/04 12:11, , 8F
啊 我知道問題在哪了 我把Task.Start和Wait一起擺在foreach
02/04 12:11, 8F

02/04 12:11, , 9F
先foreach Start完 再WaitAll就讓CPU跑到100%了
02/04 12:11, 9F

02/04 15:31, , 10F
Parallel.For/Foreach
02/04 15:31, 10F
文章代碼(AID): #1MiWIs8h (C_Sharp)
文章代碼(AID): #1MiWIs8h (C_Sharp)