[英]Spring Webflux - performance of event loop between real hardware cores and virtual cores
[英]Nodejs performance event loop
有文章声称由于其单线程事件循环而具有出色的nodejs性能。 我不是要征求意见,而是要提供力学解释 。
线程开始处理请求,进行一点计算,然后发现需要从数据库读取。 这是异步完成的。 没有延迟,线程可以继续...但是如果没有数据,该怎么办?
A1对我来说毫无意义。 我可以想象一个客户端在此期间发出其他请求(例如在首次访问站点时加载多个资源),但总的来说没有。
A2当它获取另一个请求时,它将失去整个上下文。 该上下文保存在promise中,当数据到达时,promise将被实现,但是处理该promise的线程是什么?
在B1的情况下,您可能很幸运,并且某些相关数据可能仍在线程的缓存中,但是考虑到DB请求需要花费几毫秒的时间,因此收益是恕我直言的低。
案例B2实际上不等于上下文切换吗?
答:Node.js将不会响应任何请求,除非您编写主动发送响应的代码。 该代码是同步运行还是异步运行都没有关系。
客户端(甚至服务器的网络堆栈)无法知道或不在乎同步是否同时发生。
B:只有一个Node.js线程,一个周期。
当对Node.js代码中启动的异步操作的响应到达时,Node.js事件循环线程中将引发一个事件,并调用适当的回调/处理程序。
Node.js基于libuv C库。
在内部使用线程来伪造所有系统调用的异步特性。 libuv还使用线程允许应用程序异步执行实际上正在阻塞的任务,方法是生成线程并在完成时收集结果。
线程开始处理请求,进行一点计算,然后发现需要从数据库读取。 这是异步完成的。 没有延迟,线程可以继续...但是如果没有数据,该怎么办?
将回调传递给数据库模块的方法,然后从当前作为事件侦听器调用的函数中返回。 事件循环将继续到队列中的下一个事件。 在回调内部可以访问上下文作为函数的闭包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.