PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

В чем разница между асинхронностью, многопоточностью (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, потоки/процессы — про параллельные вычисления.

Другие вопросы раздела