Что такое Quality of Service (QoS) в GCD?

«Что такое Quality of Service (QoS) в GCD?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Quality of Service (QoS) — это механизм в Grand Central Dispatch (GCD) для указания приоритета и характера задачи. Он помогает системе оптимально распределять ресурсы (процессорное время, энергопотребление) между задачами.

Основные классы QoS (от высокого к низкому приоритету):

Класс Назначение Пример использования
.userInteractive Задачи, критичные для мгновенного отклика UI. Анимации, обработка жестов, обновление интерфейса.
.userInitiated Задачи, запущенные пользователем, требующие быстрого результата. Открытие документа, обработка действия кнопки.
.utility Длительные задачи, о ходе которых пользователь может быть информирован. Загрузка данных, экспорт файла, вычисления.
.background Задачи, невидимые для пользователя и не срочные. Индексация, синхронизация, предварительная загрузка.

Пример использования:

// Пользователь инициировал загрузку — используем высокий приоритет.
DispatchQueue.global(qos: .userInitiated).async {
    let data = fetchDataFromNetwork() // Длительная операция
    // Возвращаем результат в главный поток для обновления UI.
    DispatchQueue.main.async {
        self.updateUI(with: data)
    }
}

Важные нюансы:

  • Система может повышать или понижать приоритет задач динамически.
  • Чрезмерное использование .userInteractive может негативно сказаться на времени автономной работы.
  • По умолчанию (.default) имеет приоритет между .userInitiated и .utility.