smk*_*081 5 amazon-web-services amazon-ecs node.js aws-fargate
如果我的 ECS 任务中运行的代码严格是单线程的,并且不使用并行化或多线程,那么是否可以安全地假设为该任务分配超过 1 个 vCPU 不会对其性能产生影响?会浪费吗?
1024在内存值相同的情况下,使用(1 个 vCPU)与(2 个 vCPU)运行相同的单线程容器2048不会利用额外的 vCPU,对吗?
在不使用集群的 Node.js 应用程序的上下文中,这将如何工作?
TLDR:1 个 vCPU 是单线程应用程序的合适配置。
如果我的 ECS 任务中运行的代码严格是单线程的,并且不使用并行化或多线程,那么是否可以安全地假设为该任务分配超过 1 个 vCPU 不会对其性能产生影响?会浪费吗?
正确的。
在我的另一个答案中,我详细介绍了 vCPU 的定义,即物理 CPU核心或线程的虚拟化抽象,具体取决于实例类型和 CPU 类型。
无论 1 个 vCPU 映射到一个核心还是一个线程,单线程应用程序一次只能使用一个线程,并且只能从 1 个 vCPU 中受益。
配置超过 1 个 vCPU 将不会带来任何性能优势。
在内存值相同的情况下,使用 1024(1 个 vCPU)与 2048(2 个 vCPU)运行相同的单线程容器不会利用额外的 vCPU,对吧?
“利用”是指从性能增益中受益或导致性能增益?不。
“利用”的意思是实际使用而不是闲置?最有可能的是,是的。
单线程应用程序保证一次仅在一个线程上运行,但不能保证始终在同一个线程上运行。根据操作系统的判断,它可以在任何可用的内核上运行,但不可能同时在多个内核上运行。
在不使用集群的 Node.js 应用程序的上下文中,这将如何工作?
答案保持不变——但有一点需要注意。
有四个项目可以使 Node.js 应用程序代码在多个 CPU 线程上运行:
如果没有上述任何一项,您的 Javascript 代码(在事件循环中运行)只能在单个 CPU 线程上运行,并且只能从 1 个 vCPU 中受益。
需要注意的是,除了事件循环之外,Node.js 还具有工作池,即线程池,它确实可以从更多线程中受益。
这些将受益于多核系统。尽管如此,好处很可能是微乎其微的,具体取决于它们的使用程度。
如果大量使用它们,最好使用 1 个 vCPU 和 4 个 vCPU(与默认线程池大小一致4)单独对应用程序进行基准测试。
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |