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
完成)处理请求,还是将两者(R1
和R2
)以循环方式运行?
是的,如果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
将操作卸载到另一个线程。
如果答案是连续的(即5
R2
秒钟后将被处理),我的后续问题是说我有5k个并发请求,每个请求需要2毫秒,那么最后一个请求将在5k * 2ms = 10秒后得到处理。不错吗?我需要在这里进行集群吗?
这取决于。2ms实际上对于计算机处理很多事情来说是很长的时间。在进行集群之前,您应该重构代码以最小化如上所述的请求处理程序中的阻塞代码。而且,在购买更多服务器进行群集之前,可以通过使用该cluster
库将应用程序克隆到其他线程来充分利用CPU内核。一个经过精心设计的Node.js应用程序应该能够处理数千个请求而不会出现问题。否则,您可能会重新考虑Node.js是否最适合您的应用程序。
奖励:让我们听听Node.js的发明者-为什么他创建Node.js
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句