两个express js应用程序在不同的线程上运行



我有两个express应用程序在不同的端口上运行,因为我们知道express在一个线程上运行,所以它们会为自己分配不同的内核吗?

集群模块复制快递应用程序,使其使用不同的核心。

但假设我使用两个或多个应用程序并连接它们,这是否意味着我几乎已经创建了一个集群模块?

在同一个nodejs进程中运行的两个express应用程序将共享nodejs用于运行Javascript的一个线程。它们还将共享相同的事件队列。因此,如果每个快递应用程序的请求大约在同一时间到达,那么其中一个将首先运行,然后另一个将有机会运行。它们不会在不同的内核上并行运行。

集群模块实际上启动了额外的nodejs进程,然后将传入连接路由到集群进程。在这种情况下,您有完全独立的进程,它们彼此独立运行,并且可以使用独立的核心。

在同一个nodejs应用程序中运行的两个express应用程序将不会提供与集群相同类型的多核并发。

我有两个express应用程序在不同的端口上运行,因为我们知道express在一个线程上运行,所以它们会为自己分配不同的内核吗?

否。Nodejs将有一个线程为两个Express应用程序提供服务。

但假设如果我使用两个或多个应用程序并连接它们,这是否意味着我几乎已经创建了一个集群模块?

否。同一nodejs进程中的两个或多个Express应用程序不会创建等效的集群。事实上,仅仅让nodejs进程中的一个Express应用程序提供相同数量的请求并不会给您带来任何优势。


如果你想让两个Express应用程序都能访问自己的CPU核心,那么你应该把每个Express应用程序放在自己的nodejs进程中。然后,操作系统可以为每个nodejs进程分配一个单独的核心。

此外,请记住,应用程序本身不会选择核心。操作系统查看哪些线程、哪些进程正在等待运行,并分配一个核心。这种分配甚至可能是动态的(随着时间的推移会改变它使用的核心(。虽然随着时间的推移,操作系统会更喜欢在给定的进程中使用相同的内核(因为可能有更好的缓存(,但它不会被迫只使用相同的核心。

CPU核心管理和分配由操作系统根据竞争进程的需求进行管理。

最新更新