Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Java можно ли достичь оптимизации динамическим изменением приоритета потока?

#java #android #многопоточность #исключения


Есть приложение, которое сильно грузит процессор телефона. Вся работа выполняется
в бэкграунде, но в момент выполнения работы пользователь может листать список. При
всё этом, чем слабее телефон, тем более сильно тормозит UI.

Почитал про iOS и нарвался на одно статейку - в статье самой на 100% не уверен, но
написана грамотно и объяснено толково, ссылку дать не могу, потерял, но если вкратце,
то  там было написано, что когда пользователь взаимодействует с UI (свайпы и т.д.),
UI поток получает наивысший приоритет, следовательно процессор больше внимания уделяет
UI потоку и от сюда меньше фризов, если и вообще нету.

Собственно, решил сделать нечто подобное для Android, проверил небольшой код на инкремент
счётчика двух классов с разным приоритетом, тот, что был с максимальным получил в 430
раз больше процессорного времени, это порадовало, но также было написано, что для разных
процессоров приоритеты потоков могут быть реализованы по-разному, оно логично, но также
один знакомый авторитетный человек сказал, что туда-сюда гонять приоритеты потоков
накладно, собственно решил спросить вас - что вы об этом думаете?

Заранее спасибо, надеюсь на конструктивные ответы.
    


Ответы

Ответ 1



В принципе рекомендация дать потоку UI наивысший приоритет правильна и общепринята. Процессор работает всегда и выполняет работу с наивысшей скоростью внезависимости от приоритета. Приоритет стоновится выжным, когда процессор перегружен. Тут уже задачи с большим приоритетом будут выполнятся быстрее. Поток UI должен выполняться быстро. Иначе пользователь чувствует, что аппликация подвисает. Пока процессор не перегружен, фоновая задача тоже получит максимум процессорного времени. Однако, это не будет мешать UI, поток которого имеет больший приоритет. Играть с приоритетами с моей точки зрения задача неблагодарная и как правило хорошего результата не даст. Лучше потратьте ваше время на оптимизацию вашей фоновой задачи (алгоритм, память, сеть). Может тогда и аппликация виснуть перестанет?

Комментариев нет:

Отправить комментарий