Node.JS 如何在不阻塞的情况下处理多个请求?

How Node.JS handles multiple requests without blocking?

我已经使用 Node.JS 一段时间了,只是想知道当多个客户端导致一些阻塞/耗时的响应工作时它如何处理?

考虑以下情况 1-有很多端点,其中一个很耗时,几秒钟内就会响应。 2- 假设有 100 个客户端同时向我的端点发出请求,其中一个需要相当长的时间。

该端点是否会阻止所有事件循环并让其他请求等待?

或者,一般来说,请求在 Node.JS 中是否相互阻塞?

如果不是,为什么?是单线程的,为什么不互相阻塞?

Node.Js 确实在幕后使用线程来执行I/O操作。更具体地回答您的问题 - 客户端必须等待空闲线程执行新的 I/O 任务会有一个限制。

您可以制作一个简单的玩具示例 - 运行 同时执行多个 I/O 任务(例如使用 Promise.all)并测量完成每个任务所需的时间。然后添加一个新任务并重复。 在某些时候,您会注意到两组。例如,4 个请求花费了 250 毫秒,另外 2 个请求花费了 350 毫秒(然后你得到“请求互相阻塞”)。

Node.Js 通常被称为单线程,因为它的默认 CPU 操作执行(与其非阻塞 I/O 架构相反)。因此,将它用于密集的 CPU 操作不是很明智,但在涉及 I/O 操作时非常有效。