脚本宝典收集整理的这篇文章主要介绍了

libuv核心开发者眼中的Node.js Event loop

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

文中提到的event loop均是指node.js中的。
一般网络上讲解的event loop,都会出现这张图:

clipboard.png

libuv的核心开发者Bert Belder觉得不太正确,他认为下面这张图更接近libuv的event loop原理,但也不完全正确:

clipboard.png

他认为真正的event loop应该差不多是这样的:

libuv核心开发者眼中的Node.js Event loop-脚本宝典
libuv核心开发者眼中的Node.js Event loop-脚本宝典
图中左侧分别有入口和出口箭头,入口代表node js文件开始执行,出口代表执行完成;
黄色JS方块代表同步JS的执行;
其他图标分别对应node.js官网中event loop的讲解[1]

 ┌───────────────────────────┐
┌─>│           timers          │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │     pending callbacks     │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
│  │       idle, prepare       │
│  └─────────────┬─────────────┘      ┌───────────────┐
│  ┌─────────────┴─────────────┐      │   incoming:   │
│  │           poll            │<─────┤  connections, │
│  └─────────────┬─────────────┘      │   data, etc.  │
│  ┌─────────────┴─────────────┐      └───────────────┘
│  │           check           │
│  └─────────────┬─────────────┘
│  ┌─────────────┴─────────────┐
└──┤      close callbacks      │
   └───────────────────────────┘

闹钟图标代表:timers (setTimeout, setInterval)
独角兽图标代表:poll
感叹号图标代表:check (setImmediately)
扫帚图标代表:close callbacks(比如socket.on('close', callback))

每个图标是一种类型的callback任务队列,图标之间都会执行JS同步代码;
同步代码中出现异步的API时,对一个全局计数器ref++,然后交给相应图标对应的模块去处理;
处理完成之后放到对应的图标中,同时对全局计数器ref--;
扫帚图标(close callbacks)之后,如果ref为0,则结束js运行,如果大于0,则继续loop;

参考来源:
[1] Everything You Need to Know About Node.js Event Loop - Bert Belder
[2] The Node.js Event Loop

总结

以上是脚本宝典为你收集整理的

libuv核心开发者眼中的Node.js Event loop

全部内容,希望文章能够帮你解决

libuv核心开发者眼中的Node.js Event loop

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过