B 站博主的一篇文章比较详细地分享了超线程的技术发展历史、技术原理,以下内容是我从中了解到的部分信息。
hyper-threading 学术名叫 smt,simultaneous multi-threading。实现原理是:
it involves having multiple copies of some of the CPU hardware, such as program counters and register files, while having only single copies of other parts of the hardware, such as the units that perform floating-point arithmetic.
换句话来说,采用了超线程的 CPU 会在核心里面加入更多硬件,这会增加 CPU 核心的面积,在发布奔腾 4 HT 处理器的时候 Intel 说过,超线程技术只增加了 5%的芯片面积,就可换来 15%~30%的性能提升。
关于超线程是怎么工作的,知乎有一句话说得挺形象:超线程技术就是在单个核心处理单元中集成两个逻辑处理单元,可以在单位时间内处理两个分别进行不同的任务,比如 A 线程使用 ALU 进行浮点运算,那么另一个只能去进行整数运算之类的其他任务。在 A 线程在执行某个运算的时候,超线程就可以独立出一个 B 线程去做其他和 A 线程的运算不相干的事情。
原文有一句话:当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续,因此超线程的性能并不等于两颗 CPU 的性能。
macOS、win 系统的任务管理器可以查看每一个 CPU 线程的资源消耗情况。我们说线程,可能有两个意思,一个是 CPU 线程,另一个是 process 中的线程,一个进程可能包含多个线程,打开 macOS 任务管理器,右下角可以显示目前有多少个进程多少个线程,双击其中一个进程,可以看到这个进程包含了多少个线程。
在了解超线程是什么鬼之前我们要先知道线程是什么,Thread 线程是操作系统能够进行运算调动的最小单位,它被包含在进程之中,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
采用了超线程技术的 CPU 不一定执行每一个任务都更快,它需要软件也利用超线程能力,需要程序员写适配超线程的代码。