[問題] 關於平行計算 反而更慢 請問如何加速呢?

看板AndroidDev作者 (蜜蜂)時間10年前 (2014/07/10 00:14), 10年前編輯推噓7(7031)
留言38則, 12人參與, 最新討論串1/1
最近用到平行程式 想請教兩個問題 第一個問題是 我用 AsyncTask 開五個 加上 原本的main thread 下去跑, (總共六個thread跑)跑出來的時間竟然比沒有用Async Task 還慢..... PS:真得有平行在跑 有看system.out 請問有人有遇到同樣的問題嗎? 搞不懂為甚麼開thread 會 跑得比較慢? 請問該如何加快呢? 第二個問題是 請問有前輩可以分享一下用平行計算的經驗嗎? 感激 -- I like people= ) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.234.143 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1404922453.A.59C.html

07/10 00:16, , 1F
何必一次開6個呢? 開一個在背景跑就好了啊
07/10 00:16, 1F

07/10 00:16, , 2F
AsyncTask 是為了不影響UI Thread而使用的
07/10 00:16, 2F

07/10 00:17, , 3F
Async是不會block main thread, 不代表會比較快
07/10 00:17, 3F

07/10 00:18, , 4F
越多額外的thread會有明顯的overhead
07/10 00:18, 4F

07/10 00:18, , 5F
並不是開越多Thread越快,你的CUP並沒有因此而變多
07/10 00:18, 5F

07/10 00:18, , 6F
Async的好處是使用者不會覺得反應頓頓的 不是真的快
07/10 00:18, 6F

07/10 00:27, , 7F
請問該如何加快呢??
07/10 00:27, 7F

07/10 00:27, , 8F
感激各位前輩回答
07/10 00:27, 8F
※ 編輯: bebeewei (140.114.234.143), 07/10/2014 00:27:55

07/10 00:30, , 9F
目的是為了加速 所以想說開thread
07/10 00:30, 9F

07/10 01:16, , 10F
看你處理的事情是甚麼 RenderScript看能不能幫上忙
07/10 01:16, 10F

07/10 01:18, , 11F
Default AsyncTask是serial的 詳情
07/10 01:18, 11F

07/10 01:19, , 12F
07/10 01:19, 12F

07/10 01:19, , 13F
load夠多 開thread才有意義, 同時也要滿足有多核心的環境
07/10 01:19, 13F

07/10 01:20, , 14F
loading
07/10 01:20, 14F

07/10 01:20, , 15F
而且你thread也要剛好在不同核心上運作才有效果
07/10 01:20, 15F

07/10 13:19, , 16F
不要用AsyncTask......
07/10 13:19, 16F

07/10 13:19, , 17F
基本的thread<=>handler不好嘛 幹嘛要多包一層 XD
07/10 13:19, 17F

07/10 14:03, , 18F
thread<=>handler 沒辦法用 thread pool. AsyncTask 可以
07/10 14:03, 18F

07/10 15:36, , 19F
multiThread不是用來加速的吧...
07/10 15:36, 19F

07/10 23:06, , 20F
我很確定有平行跑~ 另外我今天測試過thread了
07/10 23:06, 20F

07/10 23:06, , 21F
結果還是慢的~~Q___Q
07/10 23:06, 21F

07/11 01:07, , 22F
你甚麼平行應用都沒講 我們這樣隔空抓藥 也很無奈
07/11 01:07, 22F

07/11 01:39, , 23F
有些東西在VM上跑的確會慢些 考慮用JNI嗎?
07/11 01:39, 23F

07/11 10:44, , 24F
我不太懂位什麼不能丟pool, new個executor丟進去會有
07/11 10:44, 24F

07/11 10:45, , 25F
什麼問題嘛(抓頭)?
07/11 10:45, 25F

07/11 13:16, , 26F
請問您執行環境的 CPU 是幾核心?
07/11 13:16, 26F

07/11 14:28, , 27F
讀一下這篇吧 http://goo.gl/UBN4lG
07/11 14:28, 27F

07/11 14:37, , 28F
平行化是一件非常麻煩的事情XD
07/11 14:37, 28F

07/11 15:10, , 29F
maa..我想他說的平行跑應該根平行化是不同的事情...
07/11 15:10, 29F

07/11 15:11, , 30F
不過元po要知道 因為Context Switch要成本 這搞不好更慢
07/11 15:11, 30F

07/11 15:12, , 31F
在一個沒有互相等待的case來講 單核跑多緒不會比較快
07/11 15:12, 31F

07/11 15:13, , 32F
concurrent 跟 parallel 要搞清楚呀
07/11 15:13, 32F

07/11 15:13, , 33F
除非你有很多邏輯核 而且確定作業系統會幫你dispatch
07/11 15:13, 33F

07/11 15:15, , 34F
不然你講講 System.out你寫了甚麼
07/11 15:15, 34F

07/13 21:13, , 35F
hi 各位前輩不好意思那麼晚回
07/13 21:13, 35F

07/13 21:14, , 36F
我用的是S4 是雙四核 我是假設有一百筆資料
07/13 21:14, 36F

07/13 21:14, , 37F
每筆做同樣的事情
07/13 21:14, 37F

07/13 21:17, , 38F
有的 我就是用那篇的方法
07/13 21:17, 38F
文章代碼(AID): #1JlMfLMS (AndroidDev)