在JavaScript中,事件循环用于引擎。以下是一张用article来说明它的图表。
对于Node.js,事件循环也在这里实现。引用此question。
Node.js事件循环在单个线程下运行,这意味着您编写的应用程序代码在单个线程上进行评估。 Nodejs本身使用了libuv下面的许多线程,但是在编写nodejs代码时你永远不必处理那些线程。
但是,关于node.js事件循环,我仍然是抽象的。
答案 0 :(得分:2)
chrome
和ndoe
都有自己的event-loop
。
浏览器或节点中的事件循环不属于V8。事件循环是浏览器或节点提供的不同应用程序/依赖关系/库的一部分
他们不使用V8
的事件循环。
V8确实实现了事件循环,它是there。
但是,它应被覆盖或替换,这是Chrome和NodeJS都要做的。
浏览器(Chrome)
V8只是执行JavaScript(if和else语句,用于语句,函数,算术运算等),然后将操作移交给Libevent。
在除了JavaScript Engine V8(Chrome使用V8)之外的浏览器(例如Chrome)中,浏览器还包含不同的应用程序/依赖项/库,它们可以执行各种操作,例如发送HTTP请求,侦听DOM事件,延迟执行使用setTimeout或setInterval,缓存,数据库存储等等。
因此,浏览器(例如Chrome)使用依赖项Libevent来实现事件循环。
Node.js
V8仅执行JavaScript(if和else语句,用于语句,函数,算术运算等),然后将操作移交给Libuv。默认情况下,JavaScript不支持网络和文件系统操作。 Libuv与V8配合使用,以便V8将运行JavaScript,而Libuv将处理I / O任务。
在Node.js中,除了JavaScript Engine V8之外,Node还包含不同的应用程序/依赖项/库,它们可以执行多种操作,例如联网,文件系统操作,侦听系统事件,使用setTimeout,setInterval,setImmediate延迟执行,process.nextTick等。
因此,Node.js使用依赖项Libuv来实现事件循环。
如果回调队列(阶段)中没有任务,则节点的事件循环将处于空闲状态,但Chrome的事件循环将继续运行
Chrom的事件循环就像旋转木马,而Node的事件循环就像过山车
也有其他区别,您可以查看here。
答案 1 :(得分:1)
这两个事件循环之间的区别是什么?
无。 Nodejs 是 JavaScript引擎 1 。
1:或者更确切地说,其中一个,还有其他引擎实现相同的语言和相同的事件循环概念。
有没有图片可以更清楚地介绍它?
有很多。但我觉得动画效果更好:-) This jsconf talk菲利普罗伯茨在各地都受到称赞。
答案 2 :(得分:1)
Nodejs事件循环的实现方式与基于浏览器的事件循环的实现方式不同。
这是Nodejs社区中的一大困惑。
Nodejs在运行时使用Google V8,但未使用V8来实现事件循环。
Nodejs使用Libuv库(用C ++编写)来实现事件循环。
您上面的可用于JS事件循环的图与用于Nodejs事件循环的图不同。
为了全面了解Nodejs事件循环,您应该学习三个参考资料: