Чому I/O-операції вважаються повільними?
I/O-операції вважаються "повільними", тому що вони залежать від зовнішніх пристроїв чи мереж, а не від процесора. Тобто "повільними" - у порівнянні з операціями в оперативній пам'яті чи CPU.
1. Що відбувається під час I/O
Коли програма виконує, наприклад, читання файлу:
- Процесор передає запит операційній системі: «прочитай дані з диска».
- ОС передає задачу драйверу пристрою.
- Фізичний диск (SSD чи HDD) має:
- знайти потрібний сектор,
- зчитати дані,
- передати їх назад через системну шину в пам'ять.
- Тільки потім програма отримує результат.
Це може займати мілісекунди, а для CPU - цілу "вічність" (адже процесор оперує в наносекундах).
2. Типові приклади "повільного" I/O
| Тип I/O | Середня затримка | Чому повільно |
|---|---|---|
| Диск (HDD/SSD) | мілісекунди | потрібне фізичне читання даних з носія |
| Мережа (HTTP, TCP) | мілісекунди → секунди | очікування передачі мережею, відповідь сервера |
| База даних | мілісекунди | мережеві затримки + виконання запиту на боці БД |
| Файлова система | мілісекунди | взаємодія з ОС, доступ до файлових дескрипторів |
3. Порівняння з CPU і пам'яттю
| Тип операції | Час (приблизно) |
|---|---|
| CPU (арифметика, пам'ять) | наносекунди (10⁻⁹ с) |
| Операції з RAM | десятки наносекунд |
| SSD-диск | сотні мікросекунд → мілісекунди |
| HTTP-запит | мілісекунди → сотні мілісекунд |
Різниця в мільйони разів між обчисленням у пам'яті й читанням із диска/мережі.
4. Чому це критично в Node.js
Node.js - однопоточний. Якби I/O-операції виконувалися синхронно (блокуюче), то:
- потік був би зайнятий очікуванням диска чи мережі;
- інші запити зависали б, поки операція не завершиться.
Тому Node.js використовує неблокуючий асинхронний I/O - операції виконуються у фоні, а коли готові - викликають callback (через Event Loop).
Підсумок
I/O-операції вважаються повільними, тому що вони потребують взаємодії із зовнішніми пристроями чи мережами, де затримки (мілісекунди) на порядки більші за операції в пам'яті (наносекунди). Node.js вирішує цю проблему за допомогою асинхронного неблокуючого введення-виведення, щоб не простоювати під час очікування.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.