gpt4 book ai didi

node.js - 两个回调可以同时(并行)执行代码吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:41 24 4
gpt4 key购买 nike

我正在 for 循环内执行 IO 等待操作,现在的情况是,当所有操作终止时,我想将响应发送到服务器。现在我只是想知道假设两个 IO 操作完全同时终止,现在它们可以同时执行代码(并行)还是串行执行?

据我所知,由于 Node 是并发语言,而不是并行语言,所以我认为它们不会同时执行。

最佳答案

node.js 使用单线程运行 Javascript。这意味着两个 Javascript 永远不可能同时运行。

node.js 使用事件队列处理 I/O 完成。这意味着当一个 I/O 操作完成时,它会在事件队列中放置一个事件,当该事件到达事件队列的前面并且 JS 解释器完成它正在做的任何其他事情时,它将从事件队列中提取该事件​​并调用与之关联的回调。

由于这个过程,即使两个 I/O 操作基本上在同一时刻完成,其中一个操作也会在另一个操作之前将其完成事件放入事件队列(内部对事件队列的访问可能由互斥体控制,因此一个操作将在另一个操作之前获得互斥体),并且其中一个操作的完成回调将首先进入事件队列,然后在另一个之前被调用。两个完成回调不会同时运行。

请记住,如果包含非阻塞 I/O 操作或其他异步操作,则多个 Javascript 可以同时“运行”或“处理中”。这是因为当您在 Javscript 中“等待”异步操作完成时,您会将控制权返回给系统,然后仅在调用完成回调时才恢复处理。当 JS 解释器等待异步 I/O 操作完成并调用关联的回调时,其他 Javascript 就可以运行。但是,实际上一次仍然只运行一段 Javascript。

As far as I know, as Node is Concurrent but not the Parallel language so I don't think they will execute at the same time.

是的,没错。这并不完全是我的描述方式,因为“并发”和“并行”没有严格的技术定义,但根据我认为你的意思,这是正确的。

关于node.js - 两个回调可以同时(并行)执行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com