CPU:Cores, and Hyper-Threading
超线程(Hyper-Threading )
超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上。单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU,为此P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。
虽然采用超线程技术能同时执行两个线程,但它并不像两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
多核(multi-cores)
最开始CPU只有一个核(core),为了提高性能,引入了双核CPU,四核CPU等,双核CPU能同时执行两个线程。和超线程不同的是,双核CPU是实打实的有两个central processing units在一个CPU chip。
上图显示主板上有1个插槽(socket),这个插槽插着一个CPU,这个CPU有4个核(core),每个核都使用超线程技术,所以这台机器总共有8个逻辑核。
CPU使用率计算
CPU使用率测试
一台拥有8个logic core CPU的机器,执行如下程序:
#include <pthread.h>
const int num = 9;
pthread_t threads[num];
void *func(void* arg) {
while(1) {}
return ((void *)0);
}
int main(int argc, char* argv[]) {
for (int i = 0; i < num; i++) {
pthread_create(&threads[i], NULL, func, NULL);
}
for (int i = 0; i < num; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
该程序开启9个线程每个线程都执行一个死循环。执行后用top查看cpu使用情况:
332 root 20 0 84312 612 416 S 800.0 0.0 7:18.41 cputest
可以看到cputest的CPU使用情况为800%,也就是8个logic core都在执行cputest这个进程。
而在一个只有1个logic的CPU上跑的结果如下:
13812 ubuntu 20 0 80284 708 628 S 97.7 0.1 0:10.14 cputest
可以看到,纵使开启了9个线程,每个线程都执行死循环,CPU使用率只有97.7%。