Node.js进程在AWS Fargate中的行为是怎样的?

7

我在AWS Fargate上部署了一个Node应用,配置为1 vCPU / 2GB内存。我一直在想,当Node.js在这种设置下运行时,与可用的vCPU之间会发生什么行为。

根据AWS文档,vCPU只是Intel Xeon CPU核心上的超线程:Fargate中的vCPU真正意义是什么?。因此,默认情况下运行4个线程的线程池如何运行libuv,如果整个程序只在一个已经是超线程的vCPU上运行?另外,当配置为0.256 vCPU的较低配置上运行Node程序时,它的行为会如何表现?

此外,Fargate通过运行配置中指定的任务数自动处理扩展;但是,如果我决定使用像PM2这样的工具在每个任务中运行多个Node进程,会发生什么情况?由于我只运行1个vCPU,是否真的会起作用呢?

2个回答

1

与线程一直运行的方式相同:在单个CPU上。

线程(软件)是在多核机器普及之前发明的。所有最初的多线程Unix机器,如Sun、HP9000、Digital VAX和Alphas以及Silicon Graphics IRIS都是只有一个CPU的单核机器,没有超线程。

线程(软件)的工作方式在那时和今天是相同的:线程轮流在CPU上执行。这是由操作系统使用CPU的硬件特性——定时器中断来调度的。

操作系统将设置一个定时器来触发中断,然后将CPU传递给线程。当计时器到期时,它会中断CPU,导致CPU停止执行线程代码并执行操作系统代码。就在这个中断期间,操作系统决定下一个要执行的线程,并再次设置定时器中断。多核CPU唯一的区别是操作系统有更多的CPU内核可用于线程调度。超线程的唯一区别是操作系统可以每个CPU核心调度两个线程。

这就是为什么通常在典型的家用桌面Linux机器上有大约300个线程运行(甚至不是服务器),即使它物理上只有4个核心,每个核心只能同时运行8个线程。


1
你可能会注意到,我描述操作系统如何在单核上运行线程的方式与JavaScript事件循环的工作方式非常相似。实际上,它们非常密切相关,在单核机器上,多线程软件和事件驱动软件在理论上没有区别。实际上,除非您在单核上使用固定(非增长)线程池,否则事件驱动软件通常更快。在多个核心上,多线程软件可以并行运行更多任务。 - slebetman

-1

我也在想同样的问题,打算发送带有系统资源的日志来查看发生了什么,因为理论上,如果您不使用线程工作程序或子进程,Node.js 只会使用一个核心,但 Fargate 似乎有点不同。


这不是一个答案。 - Daniel A. White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接