Паралелізм проти асинхронності
Коротко
| Поняття | Що означає |
|---|---|
| Асинхронність (Asynchrony) | Спосіб організації роботи, за якого програма не чекає завершення однієї операції, щоб почати іншу |
| Паралелізм (Parallelism) | Фактичне одночасне виконання кількох операцій на різних ядрах/потоках процесора |
1. Асинхронність - це про керування часом
Асинхронність дозволяє не блокувати виконання програми під час очікування результату.
Програма може почати задачу, відкласти її виконання й зайнятися іншою задачею, поки перша не завершиться.
Приклад (Node.js, один потік):
console.log("A");
setTimeout(() => console.log("B"), 1000);
console.log("C");Вивід:
A
C
BТут код не виконується паралельно, але асинхронно - таймер виконується пізніше, а потік не простоює.
2. Паралелізм - це про фізичне одночасне виконання
Паралелізм можливий, коли в процесора кілька ядер. Він буквально виконує кілька задач в один і той самий момент часу.
Приклад (багатопотокове середовище, наприклад C++ чи Python із multiprocessing):
CPU ядро 1 → рахує 1 + 1
CPU ядро 2 → одночасно рахує 2 + 2Обидві операції реально відбуваються одночасно, а не по черзі.
3. Асинхронність без паралелізму
Асинхронність не вимагає багатопоточності.
Node.js - класичний приклад:
- Він однопоточний, але асинхронний.
- Коли одна операція (наприклад,
fs.readFile) чекає результат, Node.js обробляє інші події. - Усі задачі чергуються через event loop.
Тобто:
Асинхронність = імітація одночасності без справжнього паралелізму.
4. Паралелізм без асинхронності
Можна виконувати задачі паралельно, але синхронно всередині кожного потоку.
Приклад:
- Два ядра виконують дві функції одночасно.
- Але кожна з них - синхронна всередині свого потоку.
5. Асинхронність + паралелізм разом
Іноді обидві техніки комбінуються.
Приклад (Node.js + worker threads):
const { Worker } = require('worker_threads');
new Worker('./worker1.js'); // потік 1
new Worker('./worker2.js'); // потік 2- Усередині кожного потоку JS виконується асинхронно (через event loop).
- А потоки працюють паралельно на різних ядрах.
6. Аналогія з життя
| Ситуація | Що це ілюструє |
|---|---|
| Ти ставиш чайник і починаєш мити посуд, поки вода закипає | Асинхронність - ти не чекаєш завершення однієї задачі |
| Ти і друг одночасно миєте посуд | Паралелізм - дві задачі реально виконуються одночасно |
| Ти і друг миєте посуд, а чайник кипить сам | Асинхронність + паралелізм |
7. Зведена таблиця
| Критерій | Асинхронність | Паралелізм |
|---|---|---|
| Що це | Модель керування задачами | Фізичне одночасне виконання |
| Потребує кількох потоків? | Ні | Так |
| Може бути на одному ядрі? | Так | Ні |
| Де використовується | JS, Node.js, Python asyncio | C++, Java, Go, Rust |
| Реалізація в Node.js | Event Loop + callbacks/promises | Worker Threads, Cluster |
| Приклад | setTimeout, fs.readFile | Кілька worker'ів або процесів |
Підсумок
- Асинхронність = не блокуємо виконання → задачі чергуються.
- Паралелізм = задачі реально виконуються одночасно.
- Node.js - асинхронний, але не паралельний за замовчуванням.
- За потреби можна додати паралелізм (через
worker_threads,cluster).
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.