JavaScript 事件循环和 Node.js 事件循环有什么区别?
What is the different between JavaScript Event loop and Node.js Event loop?
在JavaScript中,引擎中使用了事件循环。这是一张图来说明这个 article.
(来源:mybalsamiq.com)
对于Node.js,事件循环也在这里实现。引自此 question.
The Node.js event loop runs under a single thread, this means the application code you write is evaluated on a single thread. Nodejs itself uses many threads underneath trough libuv, but you never have to deal with with those when writing nodejs code.
但是,node.js事件循环对我来说仍然是抽象的。
- 有没有图片介绍的比较清楚?
- 这两个事件循环有什么不同?
What's the difference between those two event loops?
没有。 Nodejs 是 JavaScript 引擎1.
1:或者更确切地说,其中之一,还有其他引擎实现相同的语言和相同的事件循环概念。
Is there any image to introduce it more clearly?
有很多。但我认为动画更好 :-) Philip Roberts 的 This jsconf talk 到处都受到称赞。
Nodejs 事件循环实现不同于 browser-based 事件循环一。
这是 Nodejs 社区中的一个巨大混乱点。
虽然 Nodejs 使用 Google V8 作为其运行时,但它不使用 V8 来实现事件循环。
Nodejs 使用 Libuv 库(用 C 语言编写)来实现事件循环。
您上面的图适用于 JS 事件循环,但不适用于 Nodejs 事件循环。
为了完全理解 Nodejs 事件循环,您应该学习三个参考资料:
chrome
和node
都有自己的event-loop
。
浏览器或节点中的事件循环不是 V8 的一部分。事件循环是浏览器或节点
提供的不同application/dependency/library的一部分
他们不使用 V8
的事件循环。
V8确实实现了事件循环,就是there.
然而,它意味着被覆盖或替换,这是 Chrome 和 NodeJS 碰巧做的事情。
浏览器(Chrome)
V8只是执行你的JavaScript(If和else语句,for语句,函数,算术运算e.t.c),然后将操作交给Libevent。
在浏览器中(例如Chrome)除了JavaScript引擎V8(Chrome使用V8),浏览器还包含不同的applications/dependencies/libraries可以做多种发送 HTTP 请求、监听 DOM 事件、使用 setTimeout 或 setInterval 延迟执行、缓存、数据库存储等等。
因此浏览器(例如Chrome)使用依赖项 Libevent 来实现事件循环。
Node.js
V8只是执行你的JavaScript(If和else语句,for语句,函数,算术运算e.t.c),然后将操作交给Libuv。 JavaScript 默认不支持网络和文件系统操作。 Libuv 与 V8 一起工作,因此 V8 将 运行 JavaScript 而 Libuv 将处理 I/O 任务。
在Node.js中,除了JavaScript引擎V8,Node还包含不同的applications/dependencies/libraries,它可以做各种各样的事情,比如网络,文件系统操作,监听系统事件,使用 setTimeout、setInterval、setImmediate、process.nextTick 等延迟执行。
因此Node.js使用依赖Libuv来实现事件循环。
如果回调队列(阶段)中没有任务,则节点的事件循环处于空闲状态,但Chrome的事件循环保持运行宁
Chrom's event loop is like merry-go-round while Node's event loop is like Roller coaster
还有其他的区别,你可以看看here。
在JavaScript中,引擎中使用了事件循环。这是一张图来说明这个 article.
(来源:mybalsamiq.com)
对于Node.js,事件循环也在这里实现。引自此 question.
The Node.js event loop runs under a single thread, this means the application code you write is evaluated on a single thread. Nodejs itself uses many threads underneath trough libuv, but you never have to deal with with those when writing nodejs code.
但是,node.js事件循环对我来说仍然是抽象的。
- 有没有图片介绍的比较清楚?
- 这两个事件循环有什么不同?
What's the difference between those two event loops?
没有。 Nodejs 是 JavaScript 引擎1.
1:或者更确切地说,其中之一,还有其他引擎实现相同的语言和相同的事件循环概念。
Is there any image to introduce it more clearly?
有很多。但我认为动画更好 :-) Philip Roberts 的 This jsconf talk 到处都受到称赞。
Nodejs 事件循环实现不同于 browser-based 事件循环一。
这是 Nodejs 社区中的一个巨大混乱点。
虽然 Nodejs 使用 Google V8 作为其运行时,但它不使用 V8 来实现事件循环。
Nodejs 使用 Libuv 库(用 C 语言编写)来实现事件循环。
您上面的图适用于 JS 事件循环,但不适用于 Nodejs 事件循环。
为了完全理解 Nodejs 事件循环,您应该学习三个参考资料:
chrome
和node
都有自己的event-loop
。
浏览器或节点中的事件循环不是 V8 的一部分。事件循环是浏览器或节点
提供的不同application/dependency/library的一部分
他们不使用 V8
的事件循环。
V8确实实现了事件循环,就是there.
然而,它意味着被覆盖或替换,这是 Chrome 和 NodeJS 碰巧做的事情。
浏览器(Chrome)
V8只是执行你的JavaScript(If和else语句,for语句,函数,算术运算e.t.c),然后将操作交给Libevent。
在浏览器中(例如Chrome)除了JavaScript引擎V8(Chrome使用V8),浏览器还包含不同的applications/dependencies/libraries可以做多种发送 HTTP 请求、监听 DOM 事件、使用 setTimeout 或 setInterval 延迟执行、缓存、数据库存储等等。
因此浏览器(例如Chrome)使用依赖项 Libevent 来实现事件循环。
Node.js
V8只是执行你的JavaScript(If和else语句,for语句,函数,算术运算e.t.c),然后将操作交给Libuv。 JavaScript 默认不支持网络和文件系统操作。 Libuv 与 V8 一起工作,因此 V8 将 运行 JavaScript 而 Libuv 将处理 I/O 任务。
在Node.js中,除了JavaScript引擎V8,Node还包含不同的applications/dependencies/libraries,它可以做各种各样的事情,比如网络,文件系统操作,监听系统事件,使用 setTimeout、setInterval、setImmediate、process.nextTick 等延迟执行。
因此Node.js使用依赖Libuv来实现事件循环。
如果回调队列(阶段)中没有任务,则节点的事件循环处于空闲状态,但Chrome的事件循环保持运行宁
Chrom's event loop is like merry-go-round while Node's event loop is like Roller coaster
还有其他的区别,你可以看看here。