Ответ
Асинхронность — это стиль программирования, при котором задачи выполняются неблокирующе, не дожидаясь завершения предыдущей операции. Поток может приостановить задачу и переключиться на другую, а затем вернуться к результату. Реализуется через DispatchQueue, async/await (Concurrency) или completion handlers.
Многопоточность — параллельное выполнение нескольких потоков в рамках одного процесса. Потоки разделяют память процесса. В iOS управляется через GCD (DispatchQueue) или Thread. Используется для фоновых вычислений, не блокирующих UI.
Многопроцессинг — параллельная работа нескольких независимых процессов, каждый со своей изолированной памятью. В iOS используется редко (например, для некоторых системных расширений через Process), так как приложения обычно однопроцессные.
Ключевые отличия:
- Уровень абстракции: Асинхронность — это парадигма, многопоточность и многопроцессинг — механизмы реализации параллелизма.
- Изоляция памяти: Потоки в многопоточности разделяют память, процессы в многопроцессинге — нет.
- Типичное применение в iOS:
- Асинхронность: сетевые запросы, обработка файлов.
- Многопоточность: фоновая обработка изображений, параллельные вычисления.
- Многопроцессинг: специфичные системные задачи.
Пример асинхронности с GCD:
// Не блокирует главный поток
DispatchQueue.global(qos: .userInitiated).async {
let data = performHeavyCalculation()
DispatchQueue.main.async {
updateUI(with: data)
}
}
Пример многопоточности (параллельные задачи):
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)
concurrentQueue.async { task1() }
concurrentQueue.async { task2() } // Могут выполняться одновременно