1. 超线程

        超线程是英特尔开发出来的一项技术,使得单个处理器可以象两个逻辑处理器那样运行,这样单个处理器以并行执行线程。
这里的单个处理器也可以理解为CPU的一个核心;这样便可以理解为什么开启了超线程技术后,逻辑CPU的数目是核心数的两倍了。

2. 超线程技术实现并行操作的原理

        一个线程在执行时会占用CPU资源,其他线程想要得到执行就必须等待该线程将CPU资源让出。

        利用超线程技术,模拟出的两个逻辑内核共享同一个CPU资源,所以同一时刻可以有两个线程都占用CPU资源,因此这两个线程都可以得到执行,这就是实现同一时间执行两个线程的并行操作。

        比如说:

        有个单核的CPU,想要运行一个多线程的程序,通常情况下,只能是由Cpu在线程之间来回调度,但是当开启了超线程之后,可以在一个线程执行整数指令集的时候,而恰好在这个时候,另一个线程执行浮点指令集,而这两个指令集分别由整数指令单元和浮点指令单元来执行。就可以同时执行这两个线程,这就叫超线程。而且实际上,是有大量资源被闲置着的。超线程技术允许两个线程同时不冲突地使用CPU中的资源。指令单元闲置,可以通过超线程的技术来达到提高利用率。这叫做硬件多线程技术。

 3. 如何查看是否开启了超线程

     通过查看物理CPU数,每个CPU的逻辑核数,CPU线程数可以得知是否开启了超线程。

  • 物理CPU数
  • 物理CPU就是插在主机上的真实的CPU硬件,在Linux下可以数不同的physical id 来确认主机的物理CPU个数。
  • 可以看到 当前机器拥有2颗物理CPU 
[root@localhost daxiang]# cat /proc/cpuinfo | grep "physical id" | sort | uniq
physical id     : 0
physical id     : 1
  • 单个CPU的逻辑核心数量
  • 我们常常会听说多核处理器,其中的核指的就是核心数。在Linux下可以通过cores来确认主机的物理CPU的核心数。
  • 可以看到每颗CPU拥有6个逻辑核心
[root@localhost daxiang]# cat /proc/cpuinfo | grep "cores" | uniq
cpu cores       : 6
  • 系统CPU线程数
  • 逻辑CPU跟超线程技术有联系,假如物理CPU不支持超线程的,那么逻辑CPU的数量等于核心数的数量;
  • 如果物理CPU支持超线程,那么逻辑CPU的数目是核心数数目的两倍。
  • 在Linux下可以通过 processors 的数目来确认逻辑CPU的数量。当前机器拥有24个CPU线程
[root@localhost daxiang]# cat /proc/cpuinfo | grep "processor" | wc -l
24

综上所述:这台机器拥有2颗物理CPU,每个CPU有6个逻辑核心,系统一共拥有24个CPU线程。显然开启了多线程