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 操作时非常有效。
我已经使用 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 操作时非常有效。