OS中线程与CPU线程的关系

服务器

浏览数:133

2019-10-13

一、提出由来

在复习操作系统中回顾到了线程这一概念,对此它是这样定义的:
线程是进程运行和执行的最小调度单位。

线程这两个字,我不由联想到了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使用率:


观察CPU使用率

观察得出结论:
1 . 在同一进程下,开机的线程数少于等于CPU核心数(物理核心),一个线程在同一时间只会运行在一个逻辑核上。
大于物理核心数小于等于逻辑核心数,同样也是只会运行在一个逻辑核上。
2 . 当小于等于CPU核心数时,2个逻辑核为一组(应属于同一个物理核心)对该线程进行维护管理,在每经过大约30s后,部分线程会交由另一逻辑核运行。

四、比喻

本体 喻体
线程(os) 钉子
物理核 锤子
逻辑核(即CPU线程)

运行一个线程,便是:

有一天,
一个人被分配到了一个任务:钉钉子。
只见他两只手各拿一个锤子,
但是他两只手并不协调,
所以他坚持用一只手拿锤子钉钉子,
大约每隔30s,
一只手累了,
变换另一只手继续工作。

作者:Dakini_Wind