> В чем разница последовательной и параллельной очереди (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: 2GIS

Стек: iOS, Swift

> Пример ответа

В iOS разработке ключевое различие между последовательной (serial) и параллельной (concurrent) очередями - в том, как они управляют выполнением задач.

Последовательная очередь выполняет задачи одну за другой, в порядке их добавления. Пока одна задача не завершится, следующая не начнется. Это гарантирует предсказуемый порядок и безопасность данных без дополнительных блокировок. Пример: DispatchQueue.main - главная очередь, которая последовательно обновляет UI.

Параллельная очередь запускает задачи одновременно, распределяя их по доступным потокам системы. Порядок выполнения не гарантируется - задачи могут завершаться в произвольном порядке. Это ускоряет выполнение независимых операций (например, загрузка нескольких изображений), но требует синхронизации доступа к общим ресурсам (через семафоры, блокировки или DispatchGroup).

Пример кода:

SWIFT
// Последовательная очередь
let serialQueue = DispatchQueue(label: "com.example.serial")
serialQueue.async { print("Task 1") }
serialQueue.async { print("Task 2") }
// Вывод: Task 1, Task 2 (всегда в этом порядке)
// Параллельная очередь
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)
concurrentQueue.async { print("Task A") }
concurrentQueue.async { print("Task B") }
// Вывод: Task A, Task B или Task B, Task A (порядок не определен)

Когда что использовать:

  • Последовательная - для задач, зависящих друг от друга (например, запись в файл, обновление UI).

  • Параллельная - для независимых, ресурсоемких операций (сетевые запросы, обработка данных).

Выбор очереди напрямую влияет на производительность и безопасность многопоточного кода.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью