看板 C_Sharp 關於我們 聯絡資訊
我要運算一系列的參數 用到好幾層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