有时我们会发现开发的应用在CPU核数一样的虚拟服务器上性能表现出较大的差异,这是为什么呢?上次有童鞋问到我这样一个问题,所以我根据自己的理解给大家简说下!
CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。于是出现了超线程技术。
超线程技术:将一颗具Hyper-Threading功能的“实体”处理器变成两个“逻辑”处理器。
Linux命令:
cat /proc/cpuinfo
参数解释:
processor 逻辑处理器的id
physical id 物理封装的处理器的id
core id 每个核心的id
cpu cores 位于相同物理封装的处理器中的内核数量
siblings 位于相同物理封装的处理器中的逻辑处理器的数量
cpu MHz 主频
cache size 缓存大小(KB)
我们先看来虚拟服务器1的CPU配置信息:
说明:该服务器主机有2个物理封装的处理器(physical id),每个处理器有1个处理核心(cpu cores),每个处理核心划分成2个逻辑处理器(processor),可以看出此处使用了超线程技术,如下所示:
再看来虚拟服务器2的CPU配置信息:
说明:该服务器主机有1个物理封装的处理器(physical id),每个处理器有4个处理核心(cpu cores),每个处理核心划分成1个逻辑处理器(processor),可以看出此处未使用超线程技术,如下所示:
上述2台虚拟机,从CPU的角度讲哪台性能会发挥地更好呢?
答:从逻辑处理器数量来看,2台虚拟机都是4个,但从主频和缓存大小可以看出,虚拟机2的性能应该比虚拟机1好。如果2台虚拟机的主频和缓存大小一样呢,从CPU的角度看哪台性能更好呢?
答:从逻辑处理器数量来看,2台虚拟机一样,而虚拟机1使用了超线程技术,理论上讲虚拟机1的性能比较靠近虚拟机2的性能,前提的是我们开发应用要支持超线程技术,否则也无法发挥出良好的性能!这里面其实还有一个误区:
比如说,我们的应用使用多线程技术开发的,那么在CPU层面开启了超线程技术,一定会提高性能吗?答案是否定的!只有当应用程序使用的线程数大于CPU的核数,性能才能提高上去!
PS~~今天就总结到这里,欢迎大家来讨论和交流!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端