合 CPU之单核、多核、超线程及配置
在计算机的早期,Intel奔腾处理器时代,他们的主板上的单个处理器CPU是相当大的。为了提升计算机的整体运算处理能力,一般是在主板上安装更多这样的处理器,这样就可以轻松突破晶体管限制。
物理CPU
物理CPU
,是硬件上的CPU, 也是主板上CPU的插槽个数
,是计算机上实际配置的CPU个数
我们在linux下可以通过指令 cat /proc/cpuinfo | grep 'physical id'| sort| uniq |wc -l
来查看我们计算机的物理CPU个数
在windows下,我们可以在cmd命令中输入systeminfo
,查看CPU个数
物理CPU通过连接器或插槽与其他主板元件通信,通过系统总线完成与系统的不同处理器之间的通信,但是系统总线的传输速度比起CPU的速度来说,是非常慢的通常导致出现瓶颈,使得无法充分利用每个CPU提供的计算能力。所以工程师想 能不能让处理器中的核心组件小型化,并将它们封装在单个芯片中,这些就是物理内核,可以看作是计算单元
CPU核数
CPU核数
,物理上真实的cpu核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。通常每个CPU下的核数都是固定的,如果我们的计算机有两个物理CPU,每个CPU是双核的,那么计算机总共就是四核的
。
在linux下,我们可以通过指令cat /proc/cpuinfo | grep "cpu cores" | wc -l
来统计CPU核数。
我们分别看下,单核CPU和多核CPU的架构图:
- 多个物理CPU,CPU通过
系统总线
进行通信,效率比较低。 - 多核CPU,不同的核通过
L3 cache和内部总线
进行通信,主存和外设通过总线与CPU通信
为了弥补 CPU 与内存两者之间的性能差异,就在 CPU 内部引入了 CPU Cache
,也称高速缓存
。CPU Cache
用的是 SRAM(Static Random-Access Memory)的芯片,也叫静态随机存储器。其只要有电,数据就可以保持存在,而一旦断电,数据就会丢失。
CPU Cache
通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache
部件 | CPU访问所需时间 | 备注 |
---|---|---|
L1 高速缓存 | 2~4 个时钟周期 | 每个 CPU 核心都有一块属于自己的 L1 高速缓存,L1 高速缓存通常分成指令缓存和数据缓存。 |
L2 高速缓存 | 10~20 个时钟周期 | L2 高速缓存同样是每个 CPU 核心都有的 |
L3 高速缓存 | 20~60个时钟周期 | L3 高速缓存是多个 CPU 核心共用的 |
我们可以发现越靠近 CPU 核心的缓存其访问速度越快,容量也越来越小。缓存读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找, 直到三级缓存都找不到时,最后会去内存找数据。
逻辑CPU
在历史上,为了提升CPU的性能,引入超标量、乱序运行、大量的寄存器及寄存器重命名、多指令解码器、预测运行、高速缓存等特性,这些特性从而让CPU拥有大量资源,并且CPU还能智能的预测执行指令。这就导致实际上CPU在大多数时间上,其资源是被闲置的,浪费是可耻的
,为了进一步压榨CPU的性能,工程师发现,完全可以通过复制一些CPU内部组件,例如寄存器或一级缓存,来运行第二个线程,让这些闲置资源运行在另一个线程上。虽然只有一个物理CPU,但操作系统被提供了两个"逻辑CPU" ,而不是单个CPU,这样就成功使得操作系统被"欺骗"了。
逻辑CPU是什么?
操作系统可以使用逻辑CPU来模拟出真实CPU
的效果。在从前没有多核处理器的时候,一个物理CPU只有一个物理内核,而现在有了多核技术,让物理核通过高速运算,让应用程序以为有两个CPU在运算,这样就可以把一个物理CPU当作多个"CPU"使用,即逻辑CPU
一般情况下,逻辑CPU=物理CPU个数*每颗核数
,如果我们的电脑CPU支持超线程技术且开启的话,逻辑CPU的个数是核数的2倍,逻辑CPU=物理CPU个数*每颗核数*2
,超线程技术可以使得 处理器中的1 颗内核在操作系统中,如同2 颗内核那样发挥作用。
CPU的线程数?
还有一个我们需要知道:逻辑处理器个数 = CPU的线程数,也就是说有多少个逻辑处理器,就可以开多少个线程。对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。
一般来说,物理CPU个数×每颗核数
应该等于逻辑CPU的个数
,如果不相等的话,则表示windows电脑的CPU支持超线程技术。
超线程技术
CPU的线程数概念仅仅只针对Intel的CPU , 对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。因为其是通过Intel超线程技术来实现的,Intel早在2002年推出的Northwood奔腾4 HT处理器
就把这一技术带入到消费级市场。
超线程技术(SMT),就是可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能。
我们需要先了解一下,线程和进程的概念
- 进程:
进程可以看作是程序的一次执行过程。一个程序的运行需要CPU时间、内存空间、文件以及I/O等资源。操作系统就是以进程为单位来分配这些资源的,所以说
进程是操作系统中资源分配的基本单位
。进程之间的资源是独立隔离的,能很好的进行资源管理和保护。本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!