From IT Skills
Jump to: navigation, search

V8 has heap & stack V8 call stack : can do one thing at a time. it's single threaded... Even though V8 is single-threaded, the underlying C++ API of Node isn't. It means that whenever we call something that is a non-blocking operation, Node will call some code that will run concurrently with our javascript code 1_7GXoHZiIUhlKuKGT22gHmA-1.png

Поток выполнения в браузере, равно как и в Node.js, основан на событийном цикле... Задачи из очереди исполняются по правилу «первым пришёл – первым ушёл»... Рендеринг (отрисовка страницы) никогда не происходит во время выполнения задачи движком. Не имеет значения, сколь долго выполняется задача. Изменения в DOM отрисовываются только после того, как задача выполнена... Помимо макрозадач, описанных в этой части, существуют микрозадачи... Обычно они создаются промисами... Микрозадачи также используются «под капотом» await... есть специальная функция queueMicrotask(func), которая помещает func в очередь микрозадач. Сразу после каждой макрозадачи движок исполняет все задачи из очереди микрозадач... микрозадачи исполняются непрерывно одна за другой... Для длительных тяжёлых вычислений, которые не должны блокировать событийный цикл, мы можем использовать Web workers.


9.png (Ryan Dahl) — разработчик Node.js — был вдохновлён опытом Nginx, которая использовала неблокирующий ввод/вывод, и решил создать платформу именно для разработчиков. Первое, что ему нужно было сделать, — «подружить» свою платформу с демультиплексором событий. Проблема была в том, что в каждой операционной системе демультиплексор реализован по-разному, и ему пришлось написать обёртку, которая впоследствии стала называться libuv... механизм Event Loop'a находится в libuv... Многопоточность появилась в Node.js благодаря модулю worker_threads в версии 10.5... Ещё в Node.js есть модуль cluster, но он не поднимает потоки — он поднимает ещё несколько процессов.