如果我的 ECS 任务中运行的代码严格是单线程的,并且不使用并行化或多线程,是否可以安全地假设为该任务分配超过 1 个 vCPU 不会对其性能产生影响会浪费吗?
在内存值相同的情况下,使用
1024
(1 个 vCPU)与 2048
(2 个 vCPU)运行相同的单线程容器不会利用额外的 vCPU,对吗?
在不使用集群的 Node.js 应用程序上下文中,这将如何工作?
TLDR:1 个 vCPU 是单线程应用程序的正确配置
如果在我的 ECS 任务中运行的代码完全是 单线程...将为任务配置一个 CPU 值,该值将分配 超过单个 1 个 vCPU 没有效果
正确。
如果您的 Node.js 容器将 task-level
cpu
参数设置为 1024
(1 个 vCPU),那么是的 - 在很大程度上。
四项使您的 Node.js 应用程序代码在多个 CPU 线程上运行:
如果没有上述任何一项,您的 Javascript 代码 - 在 事件循环 中运行 - 仅在 单 CPU 线程 上运行。
在我的其他答案中,我详细介绍了 vCPU 作为物理 CPU 核心或线程的虚拟化抽象的定义,具体取决于实例类型和 CPU 类型。
因此,无论 1 个 vCPU 映射到一个核心还是一个线程,单线程应用程序一次只能使用一个线程并且只能从 1 个 vCPU 中受益。
但是,需要注意的是,除了事件循环之外,Node.js 还具有工作池,即线程池。
4
。即使不使用上述 4 项,这些也会从多核系统中受益。尽管如此,好处很可能很小,具体取决于它们的使用程度。
您的应用程序是单线程的,配置超过 1 个 vCPU 将不会提供任何性能优势。
不会使用第二个vCPU
“利用” 是指从性能增益中受益或导致性能增益?没有。
“利用”的意思是实际使用且未闲置?可能是的。
单线程应用程序保证一次仅在一个线程上运行,但不能保证始终在同一线程上运行。根据操作系统的判断,它可以在任何可用的核心上运行,但不可能同时在多个核心上运行。