2015-06-13 2 views
1

Сколько потоков Java я могу запустить одновременно в приложении для Android? Я думаю, что это будет зависеть от архитектуры, так что есть ли способ определить то же самое?Android Multi Threading

ответ

2

Сколько потоков Java можно запускать одновременно в приложении для Android?

Это зависит от вашего определения «запустить» и «одновременно».

Вы можете запустить столько потоков, сколько хотите, в основном из-за ограничений памяти.

Сколько потоков выполняется одновременно, зависит от количества активных ядер на устройстве.

Я думаю, что это будет зависит от архитектуры вещь

Помимо архитектуры, это также зависит от того, что все происходит, как и Android устройств питания вниз ядра для экономии заряда батареи, когда это возможно. Кроме того, в зависимости от того, что делают потоки (например, блокировки ввода-вывода), наличие большего количества потоков, чем ядер, является разумным.

Типичный многоуровневый алгоритм калибровки пула потоков состоит в использовании потоков 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()) плюс один.

+0

Итак, если у меня 4-ядерный процессор. Тогда в любом конкретном случае максимум 4 потока могут фактически выполнять код. Хотя другие потоки могут существовать, они должны находиться в состоянии ожидания/ожидания, пока один из 4 исполняемых потоков не переключится на другого планировщиком. Правильно ли я понимаю? –

+0

@DeepankarArya: Правильно, хотя в любой заданной точке один или несколько из этих ядер могут быть отключены, поэтому количество исполняемых потоков может быть меньше, чем число * физических * ядер. – CommonsWare

+0

Спасибо большое! –