Ответ
Конструктор OperationQueue() создает параллельную (concurrent) фоновую очередь.
Ключевые характеристики по умолчанию:
- Тип: Concurrent (параллельная). Операции могут выполняться одновременно, если нет зависимостей.
- Поток: Фоновый (не главный).
- Максимум операций (
maxConcurrentOperationCount): Устанавливается в-1, что позволяет системе определять оптимальное количество параллельных задач на основе числа ядер и текущей загрузки системы. - Качество обслуживания (
qualityOfService):.background(низкий приоритет).
Пример и управление:
let queue = OperationQueue()
// Делаем очередь последовательной (serial)
queue.maxConcurrentOperationCount = 1
// Повышаем приоритет очереди
queue.qualityOfService = .userInitiated
Почему не serial? Параллельная очередь по умолчанию лучше использует ресурсы многоядерных процессоров для независимых задач.
Ответ 18+ 🔞
А, ну это ж классика, блядь! Смотри, сейчас всё разжуем, как есть.
Вот ты создаёшь OperationQueue() — и думаешь, что это такая скромная, тихая очередь, которая будет задачи по одной, как в магазине за колбасой, выполнять? А хуй там плавал, чувак!
По умолчанию это же параллельная, ёпта, очередь! То есть, если ты туда без задней мысли закинешь кучу операций, они могут стартануть все сразу, как тараканы из-под плинтуса, и начать друг другу мешать. Система сама решает, сколько их одновременно гонять, исходя из того, сколько у неё ядер и насколько она уже заебанная.
И да, работает она в фоне, не на главном потоке, с приоритетом «да похуй, сделаем когда-нибудь» (.background).
Но вся соль в том, что эту самодеятельность можно и нужно приструнить! Хочешь, чтобы операции шли строго одна за другой, как в армии? Без проблем:
let queue = OperationQueue()
// А вот тут мы её и укрощаем, блядь! Делаем последовательной.
queue.maxConcurrentOperationCount = 1
// И повышаем приоритет с «когда-нибудь» до «сейчас, сука, я жду!»
queue.qualityOfService = .userInitiated
А почему по умолчанию она параллельная? Да потому что так эффективнее, ёбана! Современные процессоры — не одноядерные калькуляторы, им дай волю — они несколько задач сразу и слопают, если те друг от друга не зависят. Но если у тебя там бардак и операции лезут друг другу в промежность — тогда да, ограничивай. Сам решай, что тебе нужно: скорость или порядок.