看到大家对 /单核/多核/单线程/多线程/同步/异步 这些概念不是特别清楚,自己整理了一下,举了几个例子给大家分享一下,可能会有用!
1 单核CPU:
首先需要确定:单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢?
举例:现在只有一个人,要做好几个任务。
单线程:任务一个一个地做,必须做完一个任务后,再去做另一个任务。
多线程:就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。
显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?
因为,多线程要在不同的任务之间切换,切换肯定是要耗费时间的。
那么问题来了,既然多线程比单线程更耗费时间,为什么还要多线程?
单线程有一个致命的问题,就是一个线程运行的整个过程中,其他线程必须等待,不能响应用户的命令,用户体验太差,好像电脑死机一样。你能想象一下,用户在听歌的时候不能写文档,体验太差。
多线程的时候,单核CPU一会做这个任务,一会做那个任务,切换的时间是毫秒级的,用户完全感觉不出来。从而给用户照成错觉,感觉这些任务并行的运行。
2 多核CPU:
对于多核CPU来说,其实实现原理和单核CPU是一致的,只是多个任务分配到了不同的CPU上面去执行,对于整个CPU的负载,会有很大的优化。
多核还有一个优点:因为有多核的原因,针对某些优先级高的线程,可以给这个线程开小灶。增加这个线程对某颗核心的亲和力,或者直接独占某个cpu也是可以的。
综上:核心和线程是两个概念,大家不要混在一起来理解!