由于其单线程事件循环,性能有articles claiming superior nodejs。 我不是在征求意见,我正在寻求机制解释。
线程开始处理请求,计算一点,并发现它需要从数据库中读取。这是异步完成的。没有延迟,线程可以继续...但是没有数据应该怎么办?
A2当它抓取另一个请求时,它就会丢失整个上下文。这个上下文保存在promise中,当数据到达时,它将被实现,但是哪个线程确实处理了这个promise?
如果是B1,你可能很幸运,一些相关数据可能仍在线程的缓存中,但鉴于数据库请求需要几毫秒,增益为恕我直言。
案例B2是否实际上等同于上下文切换?
答案 0 :(得分:1)
答:除非您编写主动发送响应的代码,否则Node.js不会响应任何请求。该代码是同步还是异步运行并不重要 客户端(甚至服务器的网络堆栈)无法知道或关心同时是否发生异步。
B:只有一个Node.js帖子,句号 当Node.js代码启动异步操作的响应时,Node.js事件循环线程中会引发一个事件,并调用相应的回调/处理程序。
答案 1 :(得分:0)
Node.js基于libuv C库。
内部使用线程来伪造所有的异步性质 系统调用。 libuv也使用线程来允许你,应用程序, 以异步方式执行实际阻塞的任务 产生一个线程并在结束时收集结果。
线程开始处理请求,计算一点,并发现它需要从数据库中读取。这是异步完成的。没有涉及延迟,线程可以继续......但如果没有数据,该怎么办?
将回调传递给DB模块的方法,并从当前函数返回,该函数也被调用为事件监听器。事件循环将继续到队列中的下一个事件。 在回调中可以访问上下文作为函数的闭包。