Ответ
Асинхронность — это стиль программирования, при котором выполнение задачи не блокирует текущий поток до её завершения. Позволяет продолжить работу, а результат будет обработан позже (через callback, делегат или await). Относится к управлению потоком выполнения.
Параллелизм — это способ выполнения, при котором две или более задач выполняются физически одновременно на разных вычислительных единицах (ядрах CPU). Относится к исполнению.
Проще: Асинхронность — «запусти и забудь, результат придет позже». Параллелизм — «делаем несколько дел в один момент времени».
Примеры в Swift:
1. Асинхронность (с GCD):
// Не блокируем главный поток на время сетевого запроса
DispatchQueue.global().async {
let data = fetchDataFromNetwork() // Долгая операция
// Возвращаем результат в главный поток для обновления UI
DispatchQueue.main.async {
updateUI(with: data)
}
}
// Код здесь выполняется НЕМЕДЛЕННО, не дожидаясь fetchDataFromNetwork
2. Параллелизм (с concurrentPerform):
// Физически параллельное выполнение итераций на доступных ядрах
let array = [1, 2, 3, 4, 5]
var results = [Int](repeating: 0, count: array.count)
DispatchQueue.concurrentPerform(iterations: array.count) { index in
// Каждая итерация может выполняться на отдельном ядре
results[index] = array[index] * 2
}
print(results) // [2, 4, 6, 8, 10]
3. Современный Swift (async/await):
// Асинхронная функция не блокирует поток
func loadData() async throws -> Data {
let url = URL(string: "https://api.example.com/data")!
// `await` означает «приостановись здесь, но не блокируй поток»
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
Task {
let data = try await loadData() // Асинхронный вызов
// Обработка данных...
}
Связь: Асинхронные задачи могут быть выполнены параллельно, если система это позволяет, но не обязаны. Параллельные задачи часто координируются с помощью асинхронных примитивов.