Sobes.tech
Middle
29

Node.js tək ipli və ya yox? Node.js icra faylı neçə ip tutə bilər və niyə? libuv nədir və o, hadisə döngüsü ilə necə əlaqəlidir?

Şirkətlər soruşuldu
Evrone

AI-dan cavab

sobes.tech Süni İntellekt

Node.js в своей основе однопоточный, то есть JavaScript код выполняется в одном основном потоке. Однако, исполняемый файл Node.js может использовать несколько потоков благодаря внутреннему механизму libuv, который управляет пулом потоков для выполнения асинхронных операций, таких как файловый ввод-вывод, DNS-запросы, и другие задачи, не поддерживаемые напрямую event loop.

По умолчанию libuv создает пул из 4 рабочих потоков, но это число можно изменить через переменную окружения UV_THREADPOOL_SIZE (максимум 128).

Event loop — это цикл событий, который обрабатывает асинхронные операции и колбэки в основном потоке. Libuv обеспечивает низкоуровневую абстракцию для работы с операционной системой, включая управление этим event loop и пулом потоков для выполнения тяжёлых или блокирующих задач вне основного потока.

Пример: когда вы вызываете асинхронное чтение файла, libuv ставит эту операцию в пул потоков, а event loop продолжает обрабатывать другие события. Когда чтение завершается, результат возвращается в основной поток через callback.

const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log('Чтение файла запущено');

Здесь чтение файла происходит в пуле потоков libuv, а основной поток не блокируется.