在Android AsyncTask類的doInBackground()函數中運行多線程代碼會有性能優勢嗎?這是我的計劃的粗略草圖:AsyncTask doInBackground中的多線程代碼
private class MyBackgroundTask extends AsyncTask<Integer, Integer, Integer>
{
protected Integer doInBackground(Integer... vals)
{
Thread[] thrds = new Thread[NUM_THREADS];
//Start all threads
for(int i = 0; i < thrds.length; ++i)
{
thrds[i] = //Initialize threads
thrds[i].start();
}
//Wait for all threads to finish
for(int i = 0; i < thrds.length; ++i)
thrds[i].join();
//Post processing...
return foo;
}
protected void onPostExecute(Integer res)
{
//Pass value back to UI class
}
}
這會產生新的線程,可以利用多核設備上的優勢嗎?例如,如果每個線程都在一個(非常大)的數組中搜索最大值,那麼多核設備上的性能是否會提高?或者這會導致「多對一」行爲。
還有一件事,我想要使用線程的多線程而不是調用多個AsyncTasks,因爲多線程最終將處理域級處理。我強烈希望從UI類中分離域級別的處理,以便我可以在不同的UI中重用域級別的類。
在此先感謝。
有趣的問題,我也很好奇,如果你可以通過利用多線程加速任務。 –
取決於任務。計算時,有明顯的優勢(因爲num_cores計算是同時執行的,但是如果你的線程正在訪問一些低速資源(例如,相同的磁盤存儲),它們甚至可能比單線程慢。在只進行內存掃描的情況下(在數組中尋找最大值)取決於處理器架構,特別是緩存組織。核心的公共緩存將增加緩存缺失的數量。 – AterLux
@AterLux是指一般的多線程,還是特指doInBackground()函數中的多線程? – nickandross