从Node.js 10.5开始,他们引入了新的工作线程,这使Node.js成为多线程环境。
以前,Node.js上只有一个线程,由于事件驱动的特性(如果我理解正确的话),不会进行cpu时间切片。
那么,现在在Node上有一个物理cpu核心的多个线程,它们如何共享cpu?OS调度程序为每个线程运行各种时间安排的时间是什么?
辅助线程的公告为
Worker类代表一个独立的JavaScript执行线程。
因此,就像启动另一个NodeJS实例一样,但是在相同的过程中并且几乎没有通信通道。
NodeJS中的工作线程模仿了现代浏览器中的Worker API(这不是巧合,NodeJS本质上是没有UI并带有一些额外的JS API的浏览器),并且在这种情况下,工作线程实际上是操作系统调度的本机线程。
上面引用的描述似乎也暗示在NodeJS中,工作线程也是通过本机线程而不是由NodeJS管理的调度实现的。
后者将是无用的,因为这正是JS事件循环与异步方法结合使用的方式。
因此,基本上,工作线程只是在同一进程中由另一个本机线程运行的NodeJS的另一个“实例”(上下文)。
作为本机线程,它由操作系统管理和计划。就像您可以在单个CPU中运行多个程序一样,您也可以使用线程来执行此操作(有趣的事实:在许多操作系统中,线程是唯一可调度的实体。程序只是一组具有共同地址空间和其他属性的线程)。
由于NodeJS是开源的,因此很容易确认这一点,请参阅Worker::StartThread
和Worker::Run
功能。
新线程将像主要线程一样执行JS代码,但是它与环境(特别是进程本身)交互的方式受到限制。
这与JS多线程处理方法是一致的,在JS方法中,“多于两个”或“更多消息循环”比真正的多线程(线程在体系结构级别具有相互影响的含义可以自由地相互交互)更多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句