Что такое конкурентность (Concurrency) в iOS?

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

Ответ

Конкурентность (Concurrency) — это концепция одновременного выполнения нескольких задач. В iOS задачи могут выполняться параллельно на разных ядрах CPU или псевдопараллельно (с быстрым переключением контекста) на одном ядре. Основные инструменты: Grand Central Dispatch (GCD), OperationQueue и async/await.

Пример с очередью GCD:

let concurrentQueue = DispatchQueue(label: "com.example.queue", attributes: .concurrent)

concurrentQueue.async {
    print("Задача 1 началась")
    sleep(1)
    print("Задача 1 завершилась")
}

concurrentQueue.async {
    print("Задача 2 началась")
    sleep(2)
    print("Задача 2 завершилась")
}
// Вывод может быть: "Задача 1 началась", "Задача 2 началась", "Задача 1 завершилась", "Задача 2 завершилась"

Важные аспекты:

  • Порядок выполнения конкурентных задач не гарантирован.
  • Время выполнения задач может перекрываться.
  • Доступ к общим ресурсам (память, файлы) требует синхронизации (например, с использованием DispatchQueue.barrier, семафоров DispatchSemaphore или акторов).