nor*_*der 2 event-loop node.js
我已经使用 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 操作方面却非常高效。