Ответ
Инструменты расположены по возрастанию уровня абстракции:
-
Thread(низкоуровневый) — Прямое управление потоками POSIX. Сложен в использовании и требует ручной синхронизации.// Ручное создание потока (не рекомендуется) let thread = Thread { /* код */ } thread.start() -
Grand Central Dispatch (GCD) —
DispatchQueue(средний уровень) — Абстрагирует потоки через очереди задач (tasks). Управление пулом потоков делегировано системе.// Простота использования, система управляет потоками DispatchQueue.global().async { /* фоновая задача */ } -
OperationQueue(высокий уровень) — Построен поверх GCD. Добавляет зависимости, отмену операций, наблюдение за состоянием (KVO) и контроль количества параллельных задач.let downloadOp = BlockOperation { /* загрузка */ } let processOp = BlockOperation { /* обработка */ } processOp.addDependency(downloadOp) // Обработка после загрузки let queue = OperationQueue() queue.addOperations([downloadOp, processOp], waitUntilFinished: false) -
Swift Concurrency (
async/await,Task, акторы) (наиболее высокоуровневый) — Интегрирован в язык. Позволяет писать линейный асинхронный код, избавляет от callback hell и предоставляет строгую проверку времени компиляции.// Читаемый, безопасный код func fetchData() async throws -> Data { let (data, _) = try await URLSession.shared.data(from: url) return data }
Итог: Наиболее высокоуровневым и современным инструментом является Swift Concurrency. OperationQueue — высокоуровневая абстракция поверх GCD. Для новых проектов рекомендуется использовать Swift Concurrency.