В чем разница между асинхронностью, многопоточностью (multithreading) и многопроцессингом (multiprocessing)
Асинхронность и Event Loop
Асинхронность, многопоточность и многопроцессинг — три разные модели параллелизма: асинхронность не блокирует поток на ожидании, многопоточность выполняет код в нескольких потоках одного процесса, многопроцессинг — в отдельных процессах.
Асинхронность (asynchrony)
Не блокировать поток на долгих операциях (I/O): запустить и обработать результат позже. В JS — один поток + Event Loop:
const data = await fetch(url); // поток свободен во время ожидания- Один поток, задачи чередуются, не выполняются одновременно.
- Хорошо для I/O (сеть, диск).
- Не ускоряет вычисления (один поток).
Многопоточность (multithreading)
Несколько потоков внутри одного процесса, разделяющих память, выполняются параллельно (на многоядерном CPU):
- Реальный параллелизм вычислений.
- Общая память → риск гонок, нужна синхронизация.
- В JS — Web Workers (но без общей памяти, обмен сообщениями; общая память — через SharedArrayBuffer).
Многопроцессинг (multiprocessing)
Несколько отдельных процессов, у каждого своя память:
- Настоящая изоляция (падение одного не роняет других).
- Обмен через IPC (медленнее общей памяти).
- В Node —
cluster,child_process.
Различия
- Асинхронность — один поток, чередование задач, для I/O.
- Многопоточность — потоки в одном процессе, общая память, для вычислений.
- Многопроцессинг — отдельные процессы, изолированная память, устойчивость.
Коротко для собеседования
Асинхронность — один поток, не блокируется на ожидании I/O (Event Loop), не ускоряет вычисления. Многопоточность — несколько потоков в процессе с общей памятью, реальный параллелизм вычислений (Web Workers), риск гонок. Многопроцессинг — отдельные процессы с изолированной памятью, устойчивость, IPC. Async — про I/O, потоки/процессы — про параллельные вычисления.