Что такое quality of service (QoS) в очередях
Что проверяют
Знаете ли вы, что в мире iOS quality of service это заявка на приоритет работы в очередях Dispatch, а не механизм из сетевого оборудования. Проверяют заодно понимание того, что приоритет тут не про скорость, а про то, чем система готова пожертвовать ради батареи.
Как отвечать
QoS это класс, который вы присваиваете очереди или отдельной единице работы, а система использует его при распределении процессорного времени, приоритета ввода-вывода и энергии.
Классы по убыванию. userInteractive это работа на текущий кадр, только очень короткая и обычно на главном потоке. userInitiated это то, чего пользователь ждёт прямо сейчас, открытие экрана по нажатию. default это неопределённая работа приложения. utility это долгие задачи с видимым прогрессом: загрузка, разбор, импорт. background это то, о чём пользователь не знает: синхронизация, предзагрузка, очистка кэша.
let queue = DispatchQueue(label: "import", qos: .utility)
queue.async {
let items = parse(payload)
DispatchQueue.main.async { render(items) }
}Отдельно стоит сказать про повышение. Если в последовательную очередь приходит элемент с более высоким классом, очередь временно поднимает свой, а sync с приоритетного потока передаёт свой класс блоку. Это штатный механизм против инверсии приоритетов. В структурированной многозадачности Swift ту же роль играет TaskPriority, который ложится на те же классы.
Где спотыкаются
Отвечают про сетевой QoS: маркировку пакетов, приоритет голосового трафика, справедливые очереди на маршрутизаторе. Тема существует, но спрашивают про другое, и такой ответ сразу показывает, что с многопоточностью кандидат дела не имел.
Ставят всему userInteractive, рассуждая, что так быстрее. Получают конкурентов главному потоку, просадку отрисовки и расход батареи. Ускоряет не класс, а отсутствие лишней работы на пути к кадру.
Забывают обратную сторону: background система вправе притормозить, а в режиме энергосбережения фактически остановить, поэтому важная фоновая загрузка туда не кладётся. Рядом стоит блокировка приоритетного потока семафором ради результата фоновой очереди: это инверсия, которую система уже не разрешит.