超线程和多线程的对比分析
超线程和多线程的对比分析
本质区别
| 特性 | Intel 超线程技术 | 程序的多线程 |
|---|---|---|
| 层面 | 硬件层面,是CPU的一种功能特性。 | 软件层面,是程序设计的一种方法。 |
| 目的 | 让一个物理CPU核心“看起来”像两个逻辑核心,目的是当一个线程在等待(如等待数据从内存加载)时,另一个线程可以立刻使用该核心的闲置计算单元,从而提高单个核心的内部资源利用率。 | 将一个大型任务拆分成多个可以同时执行的小任务,目的是将工作负载分配到多个物理核心上,实现真正的并行计算,从而缩短总执行时间。 |
| 实现者 | 由CPU制造商(如Intel)在硬件设计中实现。 | 由程序员通过代码(如使用Java的Thread类、C++的std::thread、Python的threading模块等)实现。 |
| 对操作系统的视图 | 操作系统看到的是逻辑处理器的数量翻倍了。例如,一个4核8线程的CPU,操作系统会识别为8个可用的CPU。 | 操作系统看到的是一个进程中的多个执行流(线程),然后由操作系统的调度器将这些线程分配到可用的逻辑/物理核心上执行。 |
| 性能提升 | “锦上添花”。它不能使单个核心的计算能力翻倍,通常能带来15-30%的性能提升,高度依赖于具体应用。如果应用本身就能占满核心的所有资源,超线程带来的提升微乎其微,甚至可能因为资源竞争而略有下降。 | “大力出奇迹”。在理想情况下(任务可完美拆分,无资源竞争),使用N个物理核心,性能可以接近提升N倍。 |
简单来说,Intel的超线程技术是硬件层面的“虚拟”多线程,目的是提高CPU核心的资源利用率;而我们程序使用的多线程是软件层面的“真实”多线程,目的是将任务分解以利用多个核心并行处理。
-
超线程:提高CPU核心的资源利用率,一个逻辑核处于等待中的话,转到另一个逻辑核执行。
-
多线程:将任务分解以利用多个核心并行处理。
逻辑核等待的类型
-
IO等待
-
缓存未命中:这是最常见的情况。当线程A需要的数据不在L1/L2缓存中,需要从L3缓存甚至内存中读取时(这需要等待几十甚至几百个时钟周期),线程B可以立即使用核心的计算单元。
-
分支预测失败:CPU需要清空流水线,重新取指令,这个过程会产生空闲周期。
-
访问内存:即使是访问主内存,也比CPU运算慢几个数量级。
-
等待浮点运算单元:某些复杂的浮点运算可能需要多个周期完成。
在这些“空隙”时间里,另一个逻辑线程见缝插针地执行指令,使得CPU的背部(如ALU算术逻辑单元、EU执行单元等)始终保持忙碌状态。
浙公网安备 33010602011771号