В Node.js мы много говорим о цикле событий, поэтому я хочу знать, в каком цикле событий мы говорим, цикл событий Javascript или цикл событий libuv? Я полагаю, что цикл событий libuv обеспечивает абстракцию для нескольких операционных систем мультиплексирования ввода/вывода? Я прав? Если не так, пожалуйста, объясните, как это работает? Мне нужны некоторые внутренние знания, я знаю, что такое цикл событий, я просто хочу знать, как он связан?Что такое среднее по циклу событий в node.js? javascript цикл событий или цикл событий libuv?
ответ
В настоящее время Node использует цикл событий, предоставляемый libuv, а именно его цикл событий по умолчанию: uv_default_loop()
. См: An Introduction to libuv по Nikhil Marathe:
петли по умолчанию обеспечивается libuv и могут быть доступны с помощью uv_default_loop(). Вы должны использовать этот цикл, если вам нужен только один цикл .
Примечание: node.js использует цикл по умолчанию в качестве основного цикла. Если вы используете написание привязок, вы должны знать об этом.
Существует linuv схема архитектуры на Design overview странице в документации libuv API:
В прошлом цикл событий libev был использован в узле. См Understanding the node.js event loop по Mikito Такадой:
Внутри node.js полагается на libev, чтобы обеспечить цикл событий, который дополняется libeio, которая использует объединенные потоки для обеспечения асинхронного ввода/вывода. Чтобы узнать еще больше, ознакомьтесь с документацией libev .
Некоторые хорошие ресурсы на цикл событий Node:
- Understanding the node.js event loop по Mikito Такада
- Understanding node.js Феликса Geisendörfer
- Understanding the Node.js Event Loop Тревором Норрис
- Node.js itself is blocking, only its I/O is non-blocking Джереми Эпштейна
- An Introduction to libuv автор Nikhil Marathe
- The libuv API documentation
Благодаря Saúl Ибарра Corretgé для разъяснения в комментариях.
Это неверно. libuv не использовал libev уже много лет. Кроме того, даже когда это было сделано, диаграмма все равно была бы неправильной, потому что теги не используются для ввода/вывода в сети, просто для операций с файловой системой и getaddrinfo. Вы можете найти правильную блок-диаграмму в официальной документации libuv: http://docs.libuv.org/en/v1.x/design.html – saghul
@saghul Большое спасибо за разъяснение. Я обновил свой ответ. Если что-то еще нуждается в исправлении, сообщите мне. Благодарю. – rsp
Лучше сейчас :-) Использование 'uv_default_loop' также может измениться и в будущем с введением нескольких изолятов, но в настоящий момент оно истинно. Спасибо за обновление ответа! – saghul
В каком контексте? Какая разница, если бы это было так или иначе? – Bergi
Что вы подразумеваете под «циклом событий JavaScript»? Тот, который у нас есть в браузере? – jjm
Да, это js event loop :) @jjm –