zan*_*ngw 9 javascript event-loop node.js
在 JavaScript 中,事件循环用于引擎中。下面是一张图表来说明这篇文章。

(来源:mybalsamiq.com)
对于 Node.js,事件循环也在此处实现。引用这个问题。
Node.js 事件循环在单线程下运行,这意味着您编写的应用程序代码在单线程上进行评估。Nodejs 本身通过 libuv 使用了许多线程,但是在编写 nodejs 代码时您永远不必处理这些线程。
然而,关于 node.js 事件循环对我来说仍然是抽象的。
Kan*_*per 12
Nodejs 事件循环实现与基于浏览器的事件循环不同。
这是 Nodejs 社区中一个巨大的混乱点。
虽然 Nodejs 使用 Google V8 作为它的运行时,但它不使用 V8 来实现事件循环。
Nodejs 使用 Libuv 库(用 C 编写)来实现事件循环。
您上面的图适用于 JS 事件循环,但不适用于 Nodejs 事件循环。
为了完全理解 Nodejs 事件循环,你应该学习三个参考资料:
双方chrome并node拥有自己的 event-loop。
浏览器或节点中的事件循环不是 V8 的一部分。事件循环是浏览器或节点提供的不同应用程序/依赖项/库的一部分,
它们不使用V8的事件循环。
V8 确实实现了一个事件循环,它就在那里。
然而,它意味着被覆盖或替换,这是 Chrome 和 NodeJS 碰巧做的事情。
浏览器 (Chrome)
V8 只是执行您的 JavaScript(If 和 else 语句,用于语句、函数、算术运算等),然后将操作移交给Libevent。
在浏览器(例如 Chrome)中,除了 JavaScript Engine V8(Chrome 使用 V8)之外,浏览器还包含不同的应用程序/依赖项/库,它们可以执行各种操作,例如发送 HTTP 请求、侦听 DOM 事件、使用 setTimeout 延迟执行或setInterval、缓存、数据库存储等等。
因此浏览器(例如 Chrome)使用依赖项 Libevent 来实现事件循环。
节点.js
V8 只是执行您的 JavaScript(If 和 else 语句,用于语句、函数、算术运算等),然后将操作移交给Libuv。JavaScript 默认不支持网络和文件系统操作。Libuv 与 V8 一起工作,因此 V8 将运行 JavaScript,而 Libuv 将处理 I/O 任务。
在 Node.js 中,除了 JavaScript Engine V8 之外,Node 还包含不同的应用程序/依赖项/库,它们可以执行各种操作,例如网络、文件系统操作、侦听系统事件、使用 setTimeout、setInterval、setImmediate、进程延迟执行。 nextTick 等等。
因此 Node.js 使用依赖 Libuv 来实现事件循环。
如果回调队列(阶段)中没有任务,则节点的事件循环处于空闲状态,但 Chrome 的事件循环继续运行
Chrom 的事件循环就像旋转木马,而 Node 的事件循环就像过山车
还有其他区别,你可以看这里。
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |