常买虚拟机(vps/云服务器)的小伙伴,都会挑选配置,cpu方面就是几核心这样的说明。
但这个其实,没多大意义,因为核心本就是虚拟出来的,只是一个线程或者可能比线程更轻量级。
计算机专业的小伙伴应该都知道进程与线程的区别。
一个进程可以有若干个线程(>=1)。而进程可以附加于某个特定的cpu核心上,当然默认情况下都是由系统进行自动调度。
先来看两个对比图,一个是我自己的物理机虚拟出来的小鸡:
再看一个买来的虚拟机:
再看一下我自己的家用电脑(e核被我关了)
注意到了吗?插槽和虚拟处理器这两个是不同的。我自己开的是3个独立核心,而买来的是1个核心4个线程。虽然名义上这个虚拟4核看起来多,实际上只是一个核心的4个线程。
可以理解为,在虚拟机里面,插槽就是独立处理器的数量,而虚拟处理器的数量就相当于超线程这个概念的线程数。
可以这样理解,这个插槽数就是这个虚拟机cpu在宿主机操作系统中的进程数,而这个虚拟处理器就是这个虚拟机cpu在宿主机操作系统中的线程数。
会写程序的小伙伴都知道,在系统负载不高的时候,或者说系统尚有余力的时候,多个进程和多个线程的性能其实没什么区别。但是购买虚拟机的时候,这个要看服务商的良心了,不超售大概是不可能的,他们赚的就是这个钱,那么超售就意味着系统不会为你这个小鸡预留资源,那么所有的小鸡都开启竞技模式了,看谁玩得过谁。。。
咱普通人能接触到的都是分时系统,就是cpu切分成若干个时间片,然后所有负载在这里排队,每个分一片,然后下一个。
这也就是为什么购买虚拟机,理论上的多少核心,实际上跑分情况很可能多核比单核仅高出一点点,况且那单核性能本就不高。。。
这些年,我是没发现哪个卖虚拟机的给的是虚拟插槽,我遇到的全都是虚拟线程这样的。而且虚拟机看到的这个cpu类型,是可以伪造的,这是虚拟化的一个功能。用20年前的机器,一样可以虚拟出epyc的机器给你看。。。
琢磨这个,是因为我有个挺极品的小鸡,网络挺好,但是稍微有个负载,比如打开个什么很小的程序,立马连icmp都丢包,而这个小鸡是2核心。这个现象还是在系统完全空转的情况下,搞的我也挺郁闷。。。
而宿主机的负载情况不可能给用户看到,所以你新买的小鸡跑分很帅,但是过阵子可能就惨不忍睹,因为一个宿主机上承载的小鸡多了,那么性能自然就会越来越低。。。
这是个两难的事,这么多年的观察,不论是阿里腾讯还是one man作坊,都会有这个现象,大厂只是稍微好些。
所以啊,我自己的选择是,后端重要的负载,比如自动化交易,比如行情传输这些还是老老实实弄几个物理机,而前端多买几个便宜小鸡做跳板用,这些小作坊本就稳定性差,那么多搞几个么,一个断了就换另一个,不耽误事就行。。。这样也就不必去跟这些小作坊纠缠,比如上次遇到那个极点idc(cloud.jdidc.cn)一断就是几十个小时,还骂我,那不买就是了。