1
我可以在Android應用程序中同時運行多少個Java線程?我認爲這將是一個架構依賴的東西,所以有沒有一種方法來確定相同的?Android多線程
我可以在Android應用程序中同時運行多少個Java線程?我認爲這將是一個架構依賴的東西,所以有沒有一種方法來確定相同的?Android多線程
我可以在Android應用程序中同時運行多少個Java線程?
這取決於你的「運行」和「同時」的定義。
您可以根據需要啓動儘可能多的線程,主要受限於內存限制。
同時執行多少個線程取決於設備上活動核心的數量。
我認爲這將是一個體繫結構相關的事情
架構之外,也要看對什麼是所有的事情,因爲Android設備斷電內核以節省電池電量,只要有可能。另外,根據線程在做什麼(例如,阻塞I/O),擁有比內核更多的線程是合理的。
一個典型的多核線程池大小調整算法是使用2n + 1個線程,其中n是核心數。 AsyncTask
uses this approach,例如:
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
這裏,線程池將增長到MAXIMUM_POOL_SIZE
,這兩次核(availableProcessors()
)加一的數量。
所以,如果我有一個4核心的CPU。然後在任何特定的實例中,最多4個線程可以實際執行代碼。儘管其他線程可能存在,但它們必須處於睡眠/等待狀態,直到調度程序切換4個正在執行的線程之一。我的理解是否正確? –
@DeepankarArya:正確,儘管在任何給定的點上,這些內核中的一個或多個可能會關閉,因此執行線程的數量可能少於*物理*內核數量。 – CommonsWare
非常感謝! –