Как исполняется асинхронный/синхронный код внутри Libuv?

вопрос такой - после того как V8 интерпретнул/компильнул наш код и начал его исполнять при встрече асинхронной операции он какие то шаманские штуки сделает с c/c++ биндингом ноды (любой, не имеет значения) это ок, потом пойдет в Libuv и вот вопрос libuv когда увидит что операция асинхронная кинет ее на выполнение epoll/iocp и тд (без попадания в event loop). После того как операция выполнена прийдёт событие и коллбек закинется в очередь фазы, как я понимаю poll, как исполнится этот код? У libuv есть просто доступ к байт-коду или машинному коду, который ранее был создан, и загружен в память, просто его на этом этапе вызывает из памяти с возвращенным значением, правильно? И такой же вопрос с синхронной операцией что происходит в этот момент? Синхронный пример:

console.log(1)
fs.someSyncMethod(() => console.log(2))
console.log(3) 

Вывод будет таким: 1,2,3 Вопрос и по этому, что происходит в Libuv когда в него попадет синхронный код? И каким образом он может заблокировать event loop если в него попадают только выполненные коллбэки? Если я что то неправильно говорю, прошу поправить. И третий вопрос - правильно ли я понимаю что код типо простых циклов/условий/console.log() исполняется внутри V8, а синхронные/асинхронные методы (того же fs) в Libuv. Если да то как Libuv запускает их?

Буду благодарен за ответ, потому что разные источники пишут по разному, а из док я не очень понял/или просто не нашел


Ответы (0 шт):