如果只有1个CPU内核,是否在带有或不带有工作线程的Node.js上进行CPU时间分片?

问题描述 投票:0回答:1

从Node.js 10.5开始,他们引入了新的工作线程,这使Node.js成为多线程环境。

以前,在Node.js上只有一个线程,由于事件驱动的特性(如果我理解正确的话,就不会发生cpu时间切片)。

因此,现在在Node.n上有一个物理cpu核心的多个线程,它们如何共享cpu?是OS调度程序为每个线程运行不同时间量的调度时间还是什么?

javascript node.js multithreading cpu
1个回答
0
投票

工作线程被公告为

Worker类表示独立 JavaScript执行thread

类似于启动另一个NodeJS实例,但在相同的过程中,并且几乎没有通信通道。

NodeJS中的工作线程模仿了现代浏览器中的Worker API(这不是巧合,NodeJS本质上是没有UI并带有一些额外的JS API的浏览器),并且在这种情况下,工作线程实际上是操作系统调度的本机线程。

上面引用的描述似乎也暗示在NodeJS中,工作线程也是通过本机线程而不是由NodeJS管理的调度实现的。后者将是无用的,因为这是与异步事件结合的JS事件循环所做的[[exactly。因此,基本上,工作线程只是在同一进程中由另一个native线程运行的NodeJS的另一个“实例”(上下文)。作为本地线程,它由操作系统管理和计划。就像您可以在单个CPU中运行多个程序一样,您也可以使用线程来执行此操作(有趣的事实:在许多操作系统中,threads是唯一可调度的实体。程序只是一组具有相同地址的线程空间和其他属性)。

由于NodeJS是开源的,因此很容易确认这一点,请参见Worker::StartThreadWorker::StartThread函数。

新线程将像主要线程一样执行JS代码,但是它与环境(尤其是进程本身)进行交互的方式受到了限制。这与JS多线程处理方法是一致的,在该方法中,“多于两个”或“更多消息循环”比真正的多线程(线程在体系结构级别具有相互影响的自由相互交互)更多。

© www.soinside.com 2019 - 2024. All rights reserved.