【linux】CPU核心与线程的关系

        看到大家对 /单核/多核/单线程/多线程/同步/异步 这些概念不是特别清楚,自己整理了一下,举了几个例子给大家分享一下,可能会有用!

【linux】CPU核心与线程的关系

1 单核CPU:
        首先需要确定:单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢?

举例:现在只有一个人,要做好几个任务。
    单线程:任务一个一个地做,必须做完一个任务后,再去做另一个任务。
    多线程:就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。


显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?
        因为,多线程要在不同的任务之间切换,切换肯定是要耗费时间的。
那么问题来了,既然多线程比单线程更耗费时间,为什么还要多线程?                                         
        单线程有一个致命的问题,就是一个线程运行的整个过程中,其他线程必须等待,不能响应用户的命令,用户体验太差,好像电脑死机一样。你能想象一下,用户在听歌的时候不能写文档,体验太差。
            多线程的时候,单核CPU一会做这个任务,一会做那个任务,切换的时间是毫秒级的,用户完全感觉不出来。从而给用户照成错觉,感觉这些任务并行的运行。

2 多核CPU:
         对于多核CPU来说,其实实现原理和单核CPU是一致的,只是多个任务分配到了不同的CPU上面去执行,对于整个CPU的负载,会有很大的优化。
        多核还有一个优点:因为有多核的原因,针对某些优先级高的线程,可以给这个线程开小灶。增加这个线程对某颗核心的亲和力,或者直接独占某个cpu也是可以的。
        
综上:核心和线程是两个概念,大家不要混在一起来理解!

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/71965.html