javascript - JavaScript 中的事件循环和 Node.js 中的异步非阻塞 I/O 有什么区别?

标签 javascript node.js event-loop nodejs-server

在这个 answer对于这个问题 -

What is non-blocking or asynchronous I/O in Node.js?


描述听起来与 vanilla js 中的事件循环没有什么不同。两者有区别吗?如果不是,事件循环是否只是简单地重新命名为“异步非阻塞 I/O”,以便更轻松地销售 Node.js 而不是其他选项?

最佳答案

事件循环是机制。异步 I/O 是目标。
异步 I/O 是一种编程风格,其中 I/O 调用在返回之前不等待操作完成,而只是安排在发生这种情况时通知调用者,并将结果返回到某个地方。在 JavaScript 中,通知通常通过调用回调或解决 promise 来执行。就程序员而言,这是如何发生的并不重要:它就是这样。我请求手术,完成后,我会收到通知。
事件循环通常是如何实现的。问题是,在大多数 JavaScript 实现中,确实存在一个循环,最终归结为:

while (poll_event(&ev)) {
    dispatch_event(&ev);
}
然后通过安排操作的完成作为该循环接收的事件来完成异步操作,并将其分派(dispatch)给调用者选择的回调。
有一些方法可以实现不基于事件循环的异步编程,例如使用线程和条件变量。但是历史原因使得这种编程风格很难在 JavaScript 中实现。所以在实践中,JavaScript 中异步的主要实现是基于从全局事件循环中调度回调。
换句话说,“事件循环”描述了主机做什么,而“异步 I/O”描述了程序员做什么。
从非程序员的鸟瞰 Angular 来看,这可能看起来像 split 的头发,但这种区别有时很重要。

关于javascript - JavaScript 中的事件循环和 Node.js 中的异步非阻塞 I/O 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70201005/

相关文章:

javascript - Angular-Slick 与 Grunt

绑定(bind)内的 JavaScript setInterval

javascript - 使用 jquery 添加到表单内的表的元素不会发布

Node.js 未捕获类型错误 : callback is not a function in process. nextTick

javascript - 为什么 JavaScript 中的微任务和(宏)任务有区别?

python - 如何在从属模式下运行 Kivy EventLoop?

javascript - 如何使用 javascript 添加 svg?

node.js - 运行 voyage linux 的 ALIX/AMD Geode 上的 nodejs 导致 "invalid machine instruction"

node.js - 使用 GraphicsMagic Node 将 EPS 转换为 PNG 不会保持透明度

regex - Mocha Chai 正则表达式是相等的