Ответ
Разница заключается в блокировке текущего потока выполнения.
sync(синхронно): Вызывающий поток блокируется и ожидает полного завершения переданной задачи, прежде чем продолжить выполнение следующей строки кода.async(асинхронно): Задача ставится в очередь на выполнение, а вызывающий поток немедленно продолжает работу, не дожидаясь её окончания.
Пример на Swift (Grand Central Dispatch):
let queue = DispatchQueue.global(qos: .background)
// Синхронный вызов (блокирующий)
queue.sync {
sleep(1) // Имитация долгой задачи
print("1. Sync task completed")
}
print("2. After sync call") // Выведется вторым
// Асинхронный вызов (неблокирующий)
queue.async {
sleep(1)
print("3. Async task completed")
}
print("4. After async call") // Выведется сразу, может быть третьим или четвертым
Вывод и ключевые моменты:
1. Sync task completed
2. After sync call
4. After async call
3. Async task completed
syncиспользуется для синхронизации доступа к общим ресурсам (как примитив синхронизации) или когда следующий код критически зависит от результата задачи.asyncиспользуется для фоновых операций, чтобы не блокировать основной поток (например, для сетевых запросов или тяжелых вычислений).- Важно: Вызов
syncна текущей очереди (особенно на главной) приводит к взаимной блокировке (deadlock).