Android Threading с одним ядром - PullRequest
2 голосов
/ 04 октября 2011

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

Я смотрел на AsyncTask, но думал:

ЕслиУ меня на Optimus One работает одноядерный процессор (процессор ARM 11 с тактовой частотой 600 МГц).Я думал, что для потоков, чтобы работать независимо, вам понадобится несколько процессоров?Или я где-то ошибся?

Ответы [ 2 ]

6 голосов
/ 04 октября 2011

Чтобы гарантировать отзывчивость, необходимо покинуть основной поток или поток пользовательского интерфейса для выполнения действий пользовательского интерфейса. Это исключает интенсивное рисование или 3D-рендеринг в играх. Когда вы начнете выполнять вычислительные операции в основном потоке, пользователь увидит лаг. Классический пример:

при нажатии кнопки, сон (1000). Сравните это с нажатием кнопки, чтобы запустить AsyncTask, который спит (1000).

Asynctask (и другие потоки) позволяет приложению обрабатывать вычисления и взаимодействия с пользовательским интерфейсом "одновременно".

Что касается параллелизма, переключение контекста - это название игры (как пишет Дан).

Многопоточность на одноядерном процессоре не увеличит вашу производительность. Фактически, накладные расходы, связанные с переключением контекста, фактически уменьшат вашу производительность. ОДНАКО, кого волнует, как быстро работает ваше приложение, когда пользователь разочарован пользовательским интерфейсом и просто закрывает приложение?

Несомненно, Asynctask - это путь.

2 голосов
/ 04 октября 2011

Взгляните на статью Руководства разработчика Проектирование для отзывчивости .

Android использует ядро ​​Linux и другое специализированное программное обеспечение для создания операционной системы Android. Он использует несколько процессов, и каждый процесс имеет хотя бы один поток. Многопоточность на аппаратной платформе с одним (и несколькими) процессорами осуществляется с помощью переключения контекста . Это создает иллюзию запуска более одного потока на процессор одновременно.

...