最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Nodejs事件循环

运维笔记admin10浏览0评论

Nodejs事件循环

Nodejs事件循环

nodejs架构内部有两个事件循环吗?

  • libev / libuv
  • v8 javascript事件循环

在I / O请求上,节点将请求排队到libeio,后者又通过使用libev的事件通知数据的可用性,最后这些事件是由v8事件循环使用回调来处理的吗?

基本上,libev和libeio如何集成在nodejs架构中?

有没有可用于提供nodejs内部架构清晰图片的文档?

回答如下:

我一直在亲自阅读node.js和v8的源代码。

当我尝试理解node.js架构以编写本机模块时,我遇到了类似的问题。

我在这里发布的是我对node.js的理解,这也可能有点偏离轨道。

  1. Libev是事件循环,它实际上在node.js内部运行,以执行简单的事件循环操作。它最初是为* nix系统编写的。 Libev为运行的进程提供了一个简单但优化的事件循环。你可以阅读更多关于libev here的内容。
  2. LibEio是一个异步执行输入输出的库。它处理文件描述符,数据处理程序,套接字等。您可以在这里阅读更多相关信息here。
  3. LibUv是libeio,libev,c-ares(用于DNS)和iocp(用于windows asynchronous-io)的顶层的抽象层。 LibUv执行,维护和管理事件池中的所有io和事件。 (在libeio线程池的情况下)。你应该在libUv上查看Ryan Dahl's tutorial。这将开始让你更了解libUv如何工作,然后你将了解node.js如何在libuv和v8的顶部工作。

要了解javascript事件循环,您应该考虑观看这些视频

  • JS-conference
  • JSConf2011 ( has very irritative sfx)
  • Understanding event driven programming
  • Understanding the node.js event loop

要查看libeio如何与node.js一起使用以创建异步模块,您应该看到this example。

基本上,node.js内部发生的是v8循环运行并处理所有javascript部分以及C ++模块[当它们在主线程中运行时(根据官方文档node.js本身是单线程的)]。当在主线程之外时,libev和libeio在线程池中处理它,libev提供与主循环的交互。所以根据我的理解,node.js有1个永久事件循环:这是v8事件循环。要处理C ++异步任务,它使用线程池[via libeio&libev]。

例如:

eio_custom(Task,FLAG,AfterTask,Eio_REQUEST);

出现在所有模块中的通常是在线程池中调用函数Task。完成后,它会调用主线程中的AfterTask函数。而Eio_REQUEST是请求处理程序,它可以是一个结构/对象,其动机是提供线程池和主线程之间的通信。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论