Как создать поток (Thread) в Swift?

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

Ответ

Да, напрямую создать поток можно с помощью класса Thread. Однако в современной iOS/macOS разработке предпочтительнее использовать высокоуровневые абстракции — Grand Central Dispatch (DispatchQueue) или OperationQueue.

1. Прямое создание потока (Thread):

let customThread = Thread {
    print("Выполняюсь в кастомном потоке: (Thread.current)")
    // Долгая или блокирующая задача
}
customThread.name = "MyBackgroundThread"
customThread.start()

Недостатки: Требует ручного управления жизненным циклом, сложнее избежать race conditions и утечек.

2. Предпочтительный способ — DispatchQueue (GCD):

// Создание серийной очереди (задачи выполняются по одной)
let serialQueue = DispatchQueue(label: "com.app.serialQueue")
serialQueue.async {
    print("Задача в серийной очереди")
}

// Использование глобальной параллельной очереди
DispatchQueue.global(qos: .userInitiated).async {
    let result = performHeavyCalculation()
    DispatchQueue.main.async {
        // Обновление UI в главном потоке
        self.updateUI(with: result)
    }
}

Почему лучше: GCD автоматически управляет пулом потоков, обеспечивает эффективное использование ресурсов CPU и предоставляет простой API для синхронизации.