Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: gcd, sync, async

В чём разница между dispatch_sync и dispatch_async? Как они работают под капотом?

Вопрос проверяет понимание синхронного и асинхронного выполнения в GCD.

Короткий ответ

  • dispatch_sync: Блокирует текущий поток до завершения задачи.

  • dispatch_async: Отправляет задачу в очередь и сразу продолжает выполнение.

Длинный ответ

1. dispatch_sync:

  • Текущий поток ждет завершения задачи.

  • Может вызвать deadlock, если вызвать на текущей serial очереди.

  • Пример:

    let queue = DispatchQueue.global()
    queue.sync { print("Синхронная задача") } // Текущий поток блокируется

2. dispatch_async:

  • Задача добавляется в очередь и выполняется "когда-то потом".

  • Не блокирует текущий поток.

  • Пример:

    let queue = DispatchQueue.global()
    queue.async { print("Асинхронная задача") } // Текущий поток продолжает работу

Как работают под капотом:

  • GCD использует пул потоков для выполнения задач.

  • sync вызывает выполнение задачи в текущем или свободном потоке.

  • async добавляет задачу в очередь для планирования.

Вывод:
sync блокирует, async — нет. Используйте async для фоновых задач.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • IOS

    IOS

Ключевые слова

#gcd

#sync

#async

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.