Что такое Concurrency (многопоточность) в Swift?

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

Ответ

Swift Concurrency — это современная модель асинхронного и параллельного программирования, представленная в Swift 5.5. Она предоставляет встроенные языковые средства для написания безопасного, эффективного и читаемого асинхронного кода.

Основные компоненты

  1. async/await Синтаксис для написания асинхронного кода, который выглядит как синхронный, устраняя "callback hell".

    func fetchUserData() async throws -> User {
       let url = URL(string: "https://api.example.com/user")!
       let (data, _) = try await URLSession.shared.data(from: url)
       return try JSONDecoder().decode(User.self, from: data)
    }
  2. Actors Типы, обеспечивающие изоляцию состояния для потокобезопасности. Доступ к их свойствам возможен только асинхронно.

    actor BankAccount {
       private var balance: Double = 0
    
       func deposit(_ amount: Double) {
           balance += amount
       }
    
       func getBalance() -> Double {
           return balance
       }
    }
    // Использование
    let account = BankAccount()
    await account.deposit(100)
    let currentBalance = await account.getBalance()
  3. Structured Concurrency Иерархическая организация задач с помощью Task, TaskGroup и async let, обеспечивающая автоматическое управление жизненным циклом и отменой.

    func loadMultipleResources() async -> (Data, Data) {
       async let firstData = fetchData(from: url1)
       async let secondData = fetchData(from: url2)
       return await (firstData, secondData)
    }
  4. AsyncSequence Протокол для асинхронной итерации по последовательностям, например, по строкам файла или сетевым потокам.

    for try await line in url.lines {
       print(line)
    }

Преимущества

  • Упрощение кода: устранение вложенных замыканий и callback-ов.
  • Безопасность: встроенная защита от состояний гонки через actors и изоляцию.
  • Управление задачами: автоматическая отмена дочерних задач и обработка ошибок.
  • Производительность: эффективное планирование системой рантайма.

Системные требования: iOS 15+, macOS 12+, tvOS 15+, watchOS 8+. Для поддержки старых версий можно использовать backport-атрибуты, такие как @MainActor.