首页 > 解决方案 > 如何确保 node.js 进程将在不同的线程上运行?

问题描述

例如,服务 1 在http://127.0.0.1:5000上运行,在线程 1上运行。

我想运行服务 2,它可以在http://127.0.0.1:5001上运行,它可以在任何线程上运行,但不能在线程 1上运行。

有可能做这样的事情吗?

标签: node.js

解决方案


首先,我认为您的意思是说“CPU 核心”而不是“线程”。代码在线程中运行,线程在运行时运行在 CPU 内核上。一个进程可能包含一个或多个线程。事实上,一个 nodejs 进程包含多个线程,一个线程用于运行您的 Javascript,但其他线程参与运行整个 nodejs 进程。

给定线程在哪个 CPU 内核上运行取决于操作系统。

通常对于多核 CPU,试图同时运行的两个进程将被分配到不同的 CPU 内核。这是操作系统内部的一个动态事物,并且随着不同的线程/进程被时间切片,它会不时发生变化。任何类型的进程(包括 nodejs 进程)都没有硬绑定到特定的核心,并且这些进程中的线程也没有硬绑定到特定的核心。

操作系统将根据哪些线程在哪些进程中争用运行时间来决定如何为每个线程分配 CPU 内核,这是根据需求动态变化的分配。如果尝试运行的线程多于内核数,则线程将各自在 CPU 内核上获得时间片,它们将共享 CPU 内核,每个都取得进展,但不会独占 CPU 内核。

如果您的两个服务,一个在 5000 端口上运行,一个在 5001 端口上运行,都是 nodejs 应用程序,那么操作系统将根据需要为每个服务动态分配 CPU 内核。这两个服务进程都没有绑定到特定的核心。如果它们同时很忙,并且您有一个多核 CPU,并且计算机中没有太多其他东西也在争夺 CPU 时间,那么每个运行您的 Javascript 的服务的主线程将有不同的 CPU 核心来运行.

但是,请记住,这是一个动态分配。如果您有一个四核 CPU,并且突然在您的计算机上启动了其他几件事并且也在争夺 CPU 资源,那么 CPU 内核将在所有争夺 CPU 资源的线程/进程之间共享。共享是通过小时间片的轮换完成的,也可以包含优先级系统。具体如何工作的细节因操作系统而异,但在所有请求 CPU 资源的线程中“分时”可用 CPU 内核的原则是相同的。


推荐阅读