node.js单线程模型如何处理并发请求?

用户3198603

node.js server. Node.js使用单线程T1运行两个并发请求R1和R2 T1需要5秒钟来处理请求R1。假设此时间花费在一些实际的大功能处理上,并且没有等待/ IO调用。

我的问题是-请求R2在5秒钟后(一旦R1完成)被占用,还是两者(R1和R2)将以循环方式运行?

如果答案是连续的(即R2将在5秒后处理),我的后续问题是说我有5k http并发请求,每个请求需要2毫秒,那么最后一个请求将在5k * 2ms = 10秒后得到服务。不错吗?我需要在这里进行集群吗?

黄队

R2在5秒后(一次R1完成)处理请求,还是两者(R1R2)以循环方式运行?

是的,如果R1是同步的,则仅在R1完成后才占用R2。

简而言之,您可以google nodejs event loop有很多很棒的文章解释了Node.js如何使用事件循环来处理请求。

事件循环使Node.js可以通过将操作转移到系统内核中来执行非阻塞I / O操作(尽管JavaScript是单线程的)。(来源:https : //nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/

您是正确的,Node.js是单线程的。如果它被长时间运行的任务阻止,则无法处理其他任何事情。在您的情况下,您应该分解R1为较小的部分以进行异步处理,或者可以使用achild_process将操作卸载到另一个线程。

如果答案是连续的(即5R2秒钟后将被处理),我的后续问题是说我有5k个并发请求,每个请求需要2毫秒,那么最后一个请求将在5k * 2ms = 10秒后得到处理。不错吗?我需要在这里进行集群吗?

这取决于。2ms实际上对于计算机处理很多事情来说是很长的时间。在进行集群之前,您应该重构代码以最小化如上所述的请求处理程序中的阻塞代码。而且,在购买更多服务器进行群集之前,可以通过使用该cluster将应用程序克隆到其他线程来充分利用CPU内核一个经过精心设计的Node.js应用程序应该能够处理数千个请求而不会出现问题。否则,您可能会重新考虑Node.js是否最适合您的应用程序。

奖励:让我们听听Node.js的发明者-为什么他创建Node.js

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单线程处理任务而不排队其他请求

Node.js如何处理传入的请求?

通常,Node.js如何处理10,000个并发请求?

单线程无阻塞IO模型在Node.js中的工作方式

为什么Node.js是单线程的?

如何处理Node.js中的循环依赖关系

nodejs单线程?如果有大量并发请求,它如何工作

使用node.js测试API如何处理无效的JSON语法请求主体

Node.js如何处理一个线程的同时请求?

Node.js-单线程,非阻塞?

如果node.js是单线程的,那么server.listen()为什么返回?

当节点为单线程时,为什么在node.js中需要连接池?

“公牛”是否利用多核,因为node.js运行单线程

node.js集群,redis,单线程和非阻塞I / O如何工作?

Node.js如何同时异步和单线程?

Node.js如何处理服务器的下拉?

单线程Node.js如何同时处理请求?

Node.js单线程与并发

nodejs在提供单线程环境时如何处理多个客户端

Node.JS中的单线程事件循环与多线程非阻塞工作者

如何处理node.js casterror?

Node.js服务器如何处理请求?

如何在node.js中创建后台单线程FIFO作业队列

尽管nodejs是单线程的,但它如何处理非阻塞IO?

多核CPU与Java(Tomcat)上的单线程Node.js

单个线程如何处理Node.js中的异步代码?

如何处理 node.js 请求中的 URI 错误?

当响应是异步的时,Node.js 中如何处理多个并发请求?

在Node.js上处理并发请求时,如何处理清楚?