我主要使用其他编程语言进行编程,但我一直在用户NodeJS中制作一个webapp,并且遇到了一些我无法听到的事情。
我提到https://nodejs.org/api/cluster.html#cluster_how_it_works
我发现这解释了,即使Node只是单线程,NodeJS如何处理大量请求。然而,让我感到困惑的是,当它说许多工人之间共享一个端口时。
现在,如果Node不是多线程的,那么这些工作者到底是什么。例如,在java中,您可以使用Completable Futures作为多线程应用程序。这些导致不同的线程承担责任。
但是,如果不是线程,节点中的工作者是什么?
答案 0 :(得分:1)
Node可以在一个线程中轻松处理10,000个并发连接(有关详细信息,请参阅this answer)。对于某些阻塞它的东西,它使用一个线程池,但这对你来说是透明的。您的JavaScript在每个进程中都使用单线程事件循环。
请记住,nginx,一个以速度着称的Web服务器也是单线程的。 Redis,一个以速度着称的数据库也是单线程的。多线程适用于CPU绑定任务(当您为每个CPU使用一个线程时),但对于通常用于Node的I / O绑定任务,单线程事件循环可以更好地工作。
现在,要回答您的问题 - 在您链接到的网站所讨论的群集环境中,工作者是一个单一的过程。这些进程中的每一个仍然有一个单线程事件循环,但可能有许多进程同时执行。
有关详细信息,请参阅这些答案: