2016-04-20 81 views
0

Node.js是否在当时仅执行一个上下文或者单个代码指令而不管上下文是什么?node.js在当时只执行一个上下文吗?

在一些两个非阻塞IO操作完成并且它们的回调被调用的情况下,它们会同时运行还是Node.js将完全执行第一个回调,然后执行第二个回调?

让回调函数变得简单而短一些会更好吗?这会提高并发性吗?

+0

事件循环的每一回合都是运行到完成的。任意指令之间不会有任何回调。 – Bergi

+0

完成IO操作时调用的回调将按顺序执行,而不是同时执行。 – Nivesh

回答

1

node.js是一个EDA(事件驱动的体系结构),因此对于应用程序代码来说是非同时设计的。这并不意味着没有任何并发​​线程。实际上,I/O是在并发线程上执行的,但是它们的数据放在队列中,这些队列固有地将I/O消息序列化。这样,并行是串行化的。您无法注意到应用程序代码中的并发性。考虑一下,就好像你只有一个线程一样,你根本不能“跳跃”或“交错”代码执行。

如果遇到大量I/O消息,处理速度会更快,处理起来会有所帮助。快速回调功能意味着您可以在更短的时间内处理更多的时间,避免I/O队列发生拥塞。这就是为什么你不应该阻止。

+0

最糟糕的情况是,OP必须添加一个FIFO缓冲区来保存完整的线程,比如说8个或更多的深度。现在你有一个'突发'模式来移动大量数据包。惩罚是下游代码必须能够解析/处理数据冲击而不会阻塞。优点是解析时间允许并行处理不相互依赖的数据。 – Sparky256

相关问题