![](/img/trans.png)
[英]Azure App Service + Nginx not able to handle more than 5 concurrent requests
[英]How is nodejs able to handle more concurrent requests?
我一直在阅读apache
和nodejs
之间的以下参数,我不明白。
Apache
是基于线程和进程的, ie
每个请求都由单独的线程或进程处理(取决于配置),这意味着如果进程正在等待I / O,则整个线程都将被阻塞。
每个nodejs
实例都在单个线程中运行,并且由于其异步特性,与apache
相比,它可以处理更多的并发请求
我一直在尝试了解nodejs的得分及其主要优点,但我只是不了解它的本质。
如前所述,Apache完全基于线程,而nodejs基于事件,它使用事件循环。 现在举一个例子。 假设您有成千上万个请求。在Apache中,它将为每个请求生成线程(这显然是一个瓶颈,您不能在垂直方向上进行过多扩展以支持它。)而在节点js中,1个实例将只有一个线程。平均来说,当有I / O时,它可以接受并开始对新请求进行处理(与CPU相关)。 nodejs的并发性更高,因为它允许同时处理许多请求。但是我没有关于nodejs中请求处理是否更高的基准,但是在并发性方面,nodejs会击败它的任何一个竞争对手。
为了更好地理解,让我们从这张图片开始:
并执行以下步骤:
NodeJS
服务器。 Event Loop
(单线程),该Event Loop
由操作系统唤醒。 它将每个请求/响应作为JavaScript闭包传递给具有回调的相关辅助函数。 Event Loop
将结果返回给客户端。 这样,NodeJS主线程本身不会执行任何操作,只会将管理过程委派给非阻塞性工作人员,您可以在其中并行执行魔术工作。
注意: NodeJS一次只能接收或响应一个请求。 但是,它可以同时处理多个请求。
例如,您一次有100000个请求。 在请求处理程序中执行blocking
或non-blocking
操作确实很有意义。
阻止操作将阻止javascript处理,因为它是同步操作。 此行为可能导致服务器停止。
非阻塞操作将立即发生,因此一切都将取决于垂直缩放 。 这意味着它将以当前硬件配置的最快速度接收/响应。
要提高服务器性能:
例如, max_old_space_size :
–max-old-space-size=8192
增加了每个V8节点进程的限制,以使用最大8Gb的堆内存,而不是64位计算机上的默认1,4Gb(32位计算机上的512Mb)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.