常见术语解析

我们经常看到“处理器”、“多处理器”、“单核 CPU”、“多核 CPU”等词语,它们到底是什么意思,非常容易混淆,一顿搜索操作后,我有了如下理解:

  1. 处理器:是抽象概念,计算机有很多处理器,如中央处理器 CPU、图形处理器 GPU 等等。

image.png

  1. CPU:Central Processing Unit,中央处理器,可以有一个或多个物理核(英文 Core 代表它,实实在在能看见的),一个物理核又可以使用超线程技术得到多个逻辑核(通常称“逻辑处理器”,一般是 2 个)。

image.png

  1. 物理核:常用英文是 core,实实在在封装在 CPU 内部的硬件。
  2. 逻辑核:也称逻辑处理器,是通过超线程技术虚拟出来的,看不见,通常一个物理核虚拟出 2 个逻辑核。

image.png

作为一名软件专业的学生,我对认为人们常说的词语的意思如下:

  1. “处理器”:指“中央处理器 CPU”,和定义不符,是一种习惯或简称。
  2. “多处理器”:指“多 CPU”,和定义不符,是一种习惯或简称。
  3. “CPU”:这个是个头痛的东西,它可以指“实实在在的单个物理 CPU”,外国人也喜欢把“逻辑核”称为一个“逻辑处理器”或“逻辑 CPU”,然后 TM 的偷懒简称为“CPU”,因为一个线程实际上是跑在一个逻辑核里面的,真是让人头皮发麻。
  4. “双核四线程”:指的是一个 CPU 有 2 个物理核,1 个物理核通过超线程技术模拟出 2 个逻辑核,因为一个线程实际上是跑在一个逻辑核里面的,所以 4 个逻辑核可以并行 4 个线程(但是看网上的答案,说逻辑核并不是真正意义上的并行,物理核才是,咱不管这个)。
  5. “双核 CPU”:指一个 CPU 有 2 个物理核。
  6. “并行”和“并发”:并行是真正的“同时”执行,比如你和舍友同时在玩 LOL;而并发是指“交替”执行,比如你舍友去上厕所要你代打 LOL,而你也在打,那你就先打一会你的停下来,然后去打舍友的,如此反复,并不是真正的同时,而计算机通过“时间片”来实现并发,由于时间片很短,给人一种并行的错觉。

CPU 组成

计算机发展至今,CPU 架构种类繁多,而且术语极多,很多术语其实表达的是一个意思。
计算机 5 大组成部分:运算器,存储器,控制器,输入,输出。
CPU 的结构大致如下:
image.png
用线把存储单元(一般是一组寄存器和 L1 和 L2 缓存)控制单元(程序计数器和指令寄存器等)和运算单元连接起来构成中央处理器 CPU,连接它们的线姑且叫 CPU 内部总线。

多个 CPU 与 多核 CPU

引用一张图来说明典型的多核 CPU
处理器相关知识 - 图5
在现代一般 CPU 架构中,CPU 都拥有多个物理核,每个物理核都有自己的寄存器、L1 和 L2 缓存,多个物理核共享 L3 缓存,通过 CPU 内部总线协作(协作或可理解为各种访问数据操作,读写等?)

现在理解多 CPU 就不难了,无非是上面那张图,多个 CPU 通过系统总线连接在一起,并通过系统总线协作。

关注性能方面,前者通过 CPU 内部总线协作,后者要通过系统总线,通常来说前者性能更好,别问为什么,我只是个学软件的,面试官,求求了,问学硬件的计科吧。

常见问题

第一类是对 CPU 架构的理解:
Q:单核 CPU 可以跑多线程吗?
A:可以,若不支持超线程,那么就要支持抢占调度,然后并发执行就行了。若支持超线程,可以实现伪并行?
Q:多核 CPU 可以跑多线程吗?
A:可以,可以并行执行多线程。

第二类是关于多线程的性能问题:
解题的关键是,线程是 I/O 密集型还是 CPU 密集型(计算密集型)
Q:单核 CPU 多线程一定比多核 CPU 多线程的效率低吗?
A:不一定,若线程是 CPU 密集型,单核 CPU 一下就跑满了 100%,利用率如此之高还调度来调度去,确实浪费;若线程是 I/O 密集型,单核 CPU 跑一会就停下来等 I/O 完成了,此时调度正合适。多核 CPU 也是如此,但胜在多核可并行,毕竟贵一些= =!