栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Nodejs事件循环

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nodejs事件循环

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

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

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

  1. Libev是事件循环,它实际上在node.js内部运行,以执行简单的事件循环操作。它最初是为* nix系统编写的。Libev为运行该流程提供了一个简单但经过优化的事件循环。
  2. LibEio是一个用于异步执行输入输出的库。它处理文件描述符,数据处理程序,套接字等。

  3. LibUv是libeio,libev,c-ares(对于DNS)和iocp(对于Windows异步-io)顶部的抽象层。LibUv执行,维护和管理事件池中的所有io和事件。(如果是libeio线程池)。您应该查看RyanDahl。这将使您对libUv本身的工作方式更加了解,然后您将了解node.js在libuv和v8之上的工作方式。

基本上,在node.js内部发生的事情是v8循环运行并处理所有javascript部分以及C模块(当它们在主线程中运行时(根据官方文档,node.js本身是单线程的))。当在主线程之外时,libev和libeio在线程池中对其进行处理,并且libev提供与主循环的交互。因此,据我了解,node.js具有1个永久事件循环:这就是v8事件循环。为了处理C

异步任务,它使用一个线程池[通过libeio&libev]。

例如:

eio_custom(Task,FLAG,AfterTask,Eio_REQUEST);

在所有模块中出现的通常是

Task
在线程池中调用该函数。完成后,它将
AfterTask
在主线程中调用该函数。而
Eio_REQUEST
请求处理程序可以是结构/对象,其目的是在线程池和主线程之间提供通信。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号