我一直在阅读apache
和nodejs
之间的以下论点,我不明白。
Apache
是基于线程和进程的i.e
每个请求由一个单独的线程或进程处理(取决于配置),这意味着如果进程正在等待I / O,则整个线程是阻止。
每个nodejs
实例都在一个线程中运行,由于其异步性,与apache
相比,它可以处理更多的并发请求
我一直试图了解nodejs得分及其主要优势,但我只是没有得到它的本质。
答案 0 :(得分:1)
Apache完全基于线程,如您所描述的.WHile nodejs是基于事件的。它使用事件循环。 现在让我们举个例子。 假设你有成千上万的请求。在apache中它会为每个请求产生线程(这显然有一个瓶颈,你不能垂直扩展以支持这个。) 在节点js 1中,实例将具有单个线程。它不会阻塞i / o。同时i / o在那里它可以接受并开始处理(cpu相关)新请求。 nodejs中的并发性更高。因为它允许同时处理许多请求。但是我没有对nodejs中的请求处理是否稍微高一点进行任何基准测试。但是就并发性而言,nodejs会打败任何一个竞争对手。
答案 1 :(得分:1)
为了更好地理解,让我们从这张图片开始:
并且有以下步骤:
NodeJS
服务器发送HTTP请求。Event Loop
(单线程),由操作系统唤醒。它将每个请求/响应作为Javascript闭包传递给具有回调的相关工作者函数。Event Loop
将结果返回给客户。这样NodeJS主线程本身就不会执行任何操作,只会将管理过程委托给非阻塞工作者,在那里你可以同时执行你的魔法工作。
注意: NodeJS一次只能接收或回复一个请求。但是,在同一时间它可以处理多个请求。
例如,您一次有100000个请求。在请求处理程序中执行操作确实很有意义blocking
或non-blocking
。
阻止操作会阻止javascript处理,因为它会发生同步操作。此行为可能导致服务器暂停。
非阻止操作会立即发生,因此一切都取决于vertical scaling。这意味着它将以当前硬件配置可能的速度接收/响应。
提高服务器性能:
–max-old-space-size=8192
增加每个V8节点进程的限制,以使用最大8Gb的堆 内存而不是64位机器上的1,4Gb默认值(512Mb on a 32位机器)。