Connect with us

TechHype

Под капотом: MessageQueue без блокировок в Android 17

Новая реализация под названием DeliQueue отказалась от традиционных блокировок и вместо них применяет lock-free структуры данных: производители сообщений пушат задачи в lock-free стек, а единственный поток UI (Looper) затем переносит их в собственную упорядоченную очередь (min-heap).

Опубликовано

/

     
     

В Android 17 Google полностью переосмыслил работу базового механизма обработки сообщений в приложениях: MessageQueue. Ранее эта очередь использовала один блокирующий lock для синхронизации, что могло приводить к блокировкам UI-потока (например, при одновременной работе фоновых задач) и вызывать задержки в работе интерфейса. Новая реализация под названием DeliQueue отказалась от традиционных блокировок и вместо них применяет lock-free структуры данных: производители сообщений пушат задачи в lock-free стек, а единственный поток UI (Looper) затем переносит их в собственную упорядоченную очередь (min-heap). Это позволяет значительно снизить конкуренцию за ресурсы, улучшить отзывчивость интерфейса и уменьшить количество пропущенных кадров.

Такой подход требует глубоких изменений в алгоритмах — например, использования атомарных операций вместо мониторов, обработки «логического удаления» сообщений и тщательного управления памятью — но результаты впечатляют: в тестах многопоточные вставки стали в тысячи раз быстрее, а время, теряемое из-за блокировок, сократилось, что приводило к заметному улучшению производительности UI в реальных приложениях. Разработчикам важно учесть эти изменения, так как новая очередь может повлиять на код, который отражением (reflection) обращается к внутренним полям MessageQueue.

Что делать

Вот что важно учитывать Android-разработчикам в связи с изменениями в Android 17:

1️⃣ Ничего специально менять не нужно — если вы используете API стандартно

Если вы работаете через обычные Handler, Looper, Coroutine Dispatchers.Main и другие публичные API, новая lock-free реализация очереди сообщений будет для вас полностью прозрачной. В Android 17 система сама стала эффективнее — UI-поток меньше блокируется, а конкуренция между потоками снижена.

2️⃣ Избегать рефлексии и хака внутренностей MessageQueue

Если в проекте используется reflection для доступа к внутренним полям MessageQueue или кастомные механизмы вмешательства в цикл Looper — это потенциальная зона риска. Внутренняя реализация теперь сильно изменилась, и такие решения могут работать нестабильно или сломаться.

3️⃣ Пересмотреть кастомные синхронизации вокруг UI

Раньше иногда приходилось «оборачивать» отправку сообщений дополнительными блокировками из-за конкуренции потоков. Теперь это может быть не только лишним, но и вредным — система уже оптимизирована под lock-free модель.

4️⃣ Тестировать многопоточные сценарии

Если у вас тяжелые фоновые работы (например, частая отправка сообщений в UI из нескольких потоков), стоит прогнать нагрузочные тесты на Android 17. По данным Google, производительность вставки сообщений выросла кратно, но реальные сценарии всё равно лучше проверить.

 

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: