CPU工作方式、多核心、超线程技术

CPU 架构

CPU 中央处理器中有两个模块很重要 :

  1. Processing Unit(运算处理单元),简称PU
  2. Architectual State(架构状态单元),简称AS PU一般就是执行运算,比如算数运算加减乘除。AS执行一些逻辑和调度方面的操作,比如控制内存访问等。

单核、多核CPU

单核:一般一块传统意义的CPU上会有一个PU、一个AS。 多核: 这里说的多核,是多个物理核,比如i3的双核,i5的4核(就是我们日常说的双核,四核还是八核)。这中架构下,每一个物理核都有一个PU和一个AS。所以。对于i3来说,就有总共两个PU,两个AS。对于i5来说,就有总过4个PU,4个AS。

超线程

超线程(HT)并不是我们一般说的多线程。我们一般说的多线程(multi-threading)是指程序方面的,简单的说就是‘软’的,代码级别的。而超线程一般指的是硬件架构方面的,是‘硬’的:通过调整AS而模拟出来的‘逻辑核’。

1297993-20201021192624636-78168989.jpg

相当于调度开多了几个队列,但是实际上可能只有一个AS, 只是模拟出来的。

在下图中,橙色和蓝色表明大厨(PU/CPU)是在工作的,白色格子表明大厨(PU)是空闲的。A图是单核没有没有用超线程,B图双核没有超线程,图C是单核启用了超线程。可以清晰地看到,从单核增加到双核(在没有超线程的情况下),CPU使用率并没有增加。而用了超线程后,整体CPU使用率提高了,虽然只是一个核。就相当于之前只有一个队列接受任务,而现在有多个队列,吞吐量肯定大点。

1297993-20201021193848220-364527489.jpg

下面是一个更清晰的区别。

1297993-20201021194236860-720636380.jpg

问题

那对与同一个CPU,比如i7,开了HT有什么优点:

  • 并行能力增强:处理多进程/线程的能力加强,对于支持多线程的游戏提供比较明显。

  • CPU利用率增高:一般理论上,总体性能提高差不多20%-30%。从这个角度上看,i3开启了超线程,提高了20%-30%整体水平。但是,这就意味着能和i5打成平手了??? 如果这是真的话,i5也不要卖了。两个大厨(i3),不是我等拿个鞭子抽抽就能顶的上4个大厨(i5)的。。。。

开HT有什么缺点

  • 单线程程序性能下降:

一般在5%-15%之间,主要表现在运行单线程程序。两个AS的额外开销比一个AS的开销要大,只有一个核。

与编程语言中多线程对比

我们学习java中也有多线程和这个是同一个东西吗?不是同一个东西。HT是结合硬件产生的多线程,而java中多线程是软件层面的多线程,那到底 java 可以创建多少个线程呢? 可以参考以下文章,可以看到一个JVM 在机器上可以起上万个线程。

参考文章

  • https://www.cnblogs.com/taiyonghai/p/7244878.html
  • https://www.one-tab.com/page/uH-YQxX8SmK4nj6EM7BWrQ
原文地址:https://www.cnblogs.com/Benjious/p/13854450.html