2015-01-27 3 views
3

Я выполняю базовое шифрование/дешифрование на четырехъядерном Android-телефоне.Как распределить задачу для каждого ядра процессора?

В настоящее время шифрование составляет 1,45 секунды на файл. Для 200 файлов размером около 5 минут.
Я мог бы улучшить работу в 4 раза, если бы использовал все 4 ядра.

for(i=0;i<200;i++) 
{ 
    encrypt(file[i]); 
} 

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

Как я могу вызвать функцию шифрования параллельно на всех 4 процессорных ядрах в программировании Java-андроида?

ответ

3

Использование ExecutorService для выполнения задач параллельно: http://developer.android.com/reference/java/util/concurrent/ExecutorService.html

Что-то вроде этого:

ExecutorService executorService = Executors.newFixedThreadPool(CORE_COUNT); 
    for (int i = 0; i < 200; i++) { 
     executorService.submit(new Runnable() { 
      @Override 
      public void run() { 
       encrypt(file[i]); 
      } 
     }); 
    } 

    // Waiting for completion 
    while (!executorService.awaitTermination(100L, TimeUnit.MILLISECONDS); 
+0

Замечательно написанный ответ! Однако из анализа я видел, что переименование файла (после шифрования) потребляет больше времени. Будет ли этот метод переименовываться параллельно или менеджер файлов Android разрешит ExecutorService запускать один за другим для переименования? – user3041058

+1

Это зависит от многих факторов. Если целевой раздел тот же, что и переименование, будет быстро (но среда проверит ваши права на переименование файлов, и этот момент может замедлить производительность приложения), но если разделы не совпадают, это зависит от размера файла, потому что он скопирует весь файл в новый раздел. –

1

Одним из вариантов является использование ExecutorService (http://developer.android.com/reference/java/util/concurrent/ExecutorService.html). В вашем цикле оберните каждый вызов для шифрования в Runnable или Callable и соберите Future's в списке. Затем перебирайте фьючерсы, чтобы подождать, пока они не закончатся и не обработают результаты.

Смежные вопросы