繁体   English   中英

Node.js是单线程的,但如何在1秒内处理相同的并发请求

[英]Nodejs is single threaded but how it can process same concurrent request in 1 sec

我有scenerio假设客户端向节点服务器发送请求,而节点js用单线程处理它需要1秒。 那么我的问题是:

处理同一1000个请求将花费多少时间在同一时间。

我知道答案只有1秒。 但是我不知道如何。 应该花费1000秒,因为每个请求都需要1秒来处理。 请告诉我如何通过单线程在一秒钟内完成所有请求

如果每个请求的实际完整CPU使用率是1秒,那么处理1000个请求将花费1000秒。 周围没有魔术子弹。 因此,要以每秒1000个的速度处理,您将需要1000个CPU(显然分布在许多群集服务器上)。

但是,如果1秒钟的响应时间实际上只是请求的总时间,而node.js可能大部分时间在等待数据库查找或文件操作(两者都是异步的),则CPU处于空闲状态在很多时候,一个请求正在等待某些I / O操作响应时,它可能正在处理另一个请求。 然后,当那个人在等待I / O时,它可以启动另一个请求。 这样,单个线程可以同时具有多个进行中的不同请求(假设这些请求在处理过程中正在执行一些异步I / O)。 通过这种方式,node.js交错执行多个不同的操作,但是所有操作都只有一个线程。

这是node.js设计的大规模优势。 与其为每个并发请求都需要一个相当重的线程,它实际上可以通过一个线程为多个请求提供服务。 无需使用操作系统级调度和多个堆栈帧来划分操作系统级线程的时间,而是只要一个JS块正在等待控制返回给系统,Node.js便将控制权交给事件队列中的另一个事件。 / O响应事件回来。

请告诉我如何通过单线程在一秒钟内完成所有请求

仅在任何给定请求的实际CPU时间少于1/1000秒的情况下才有可能。 否则,您将必须使用多个CPU才能处理1000个请求/秒。 您可能还需要多个网卡,因为您正在谈论的是能够在不到1ms的时间内读取请求并发送响应。 单个网卡不太可能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM