Ответ вслух Middle Swift Concurrency спрашивают часто обновлено

GCD или Swift Concurrency: что выбрать

Вопрос

Чем Swift Concurrency лучше GCD и остались ли задачи для GCD?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

GCD даёт очереди и блоки, но вся безопасность на разработчике: какая очередь, кто синхронизирует доступ, кто отменяет. Swift Concurrency переносит это в язык.

Что должно прозвучать в ответе

  • Линейный код вместо колбэков, ошибки через `throws`

  • Структурированная конкурентность: дети, отмена, ожидание

  • Проверка гонок данных компилятором: акторы, Sendable, режим Swift 6

  • Кооперативный пул без взрыва потоков, в отличие от многих очередей GCD

  • GCD остаётся для старого кода, точного контроля очередей и низкоуровневых API

  • Не смешивать: не блокировать потоки пула семафорами

Что могут спросить следом

  • Как вызвать async-функцию из синхронного кода?
  • Что такое thread explosion в GCD?

Разбор

GCD даёт очереди и блоки, но вся безопасность на разработчике: какая очередь, кто синхронизирует доступ, кто отменяет. Swift Concurrency переносит это в язык. Код с async/await линейный, ошибки через throws, отмена встроена. Структурированная конкурентность гарантирует, что дочерние задачи завершатся или отменятся вместе с родителем. Акторы и Sendable дают компилятору проверить гонки данных, а в режиме Swift 6 это ошибки компиляции. Ещё плюс: задачи выполняются на пуле размером с число ядер, и нет взрыва потоков, когда сотни блоков блокируются в разных очередях. GCD я оставляю для старого кода, для случаев, где нужна конкретная очередь (например, API, требующее DispatchQueue), и для низкоуровневых вещей вроде DispatchSource. Главное правило: не блокировать потоки пула семафорами и sync.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.