一、提出由来
在复习操作系统
中回顾到了线程
这一概念,对此它是这样定义的:
线程是进程运行和执行的最小调度单位。
线程这两个字,我不由联想到了CPU中的线程
,比如某某CPU是4核8线程。
那么,这两个线程有何关系?它们是否相同?
二、明确定义
在CPU中所谓4核8线程:
其“核”指的是CPU物理核心;
而“线程”指的是虚拟核(逻辑核),它是通过超线程技术,将一个物理核分为2个逻辑核来提高性能。
看到这,想来这两个线程的确是不相同的,名字太具有误导性。
不过,两者究竟有何关系呢?
三、探究关系
接下来,我通过Java运行多线程,根据其对CPU占有率来简陋的推测关系。
代码如下:
public class MulThread {
public static void main(String[]args){
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
//Thread t5 = new MyThread();
//Thread t6 = new MyThread();
t1.start();
t2.start();
t3.start();
t4.start();
//t5.start();
//t6.start();
}
}
class MyThread extends Thread{
private int k;
@Override
public void run() {
k = 0;
while (true) {
k++;
}
}
}
执行后观察CPU使用率:

观察得出结论:
1 . 在同一进程下,开机的线程数少于等于CPU核心数(物理核心),一个线程在同一时间只会运行在一个逻辑核上。
大于物理核心数小于等于逻辑核心数,同样也是只会运行在一个逻辑核上。
2 . 当小于等于CPU核心数时,2个逻辑核为一组(应属于同一个物理核心)对该线程进行维护管理,在每经过大约30s后,部分线程会交由另一逻辑核运行。
四、比喻
本体 | 喻体 |
---|---|
线程(os) | 钉子 |
物理核 | 锤子 |
逻辑核(即CPU线程) | 人 |
运行一个线程,便是:
有一天,
一个人被分配到了一个任务:钉钉子。
只见他两只手各拿一个锤子,
但是他两只手并不协调,
所以他坚持用一只手拿锤子钉钉子,
大约每隔30s,
一只手累了,
变换另一只手继续工作。
网友评论