多线程与CPU

这段时间看了几篇关于线程与CPU之间关系的文章,在此自己做了一下总结:

 

以前相对旧式一点的计算机都是单个CPU(单核)的,好比多条生产线(多线程)上只有一个组装工人( CPU),同时对多条生产线做组装。

那CPU是如何对多线程进行处理的呢?

 

CPU有个时钟频率,表示每秒能执行CPU指令的次数,在每个时钟周期内,CPU实际上只能执行一条(或者多条指令)。操作系统对进程线程进行管理,轮流(不是按顺序)为每个进程分配很短的一段时间(不一定均分),然后在每个进程的内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互切换着去执行,因为切换的时间非常非常短,因此,给人的感觉就是这多个任务、多个线程是在并发运行的。这就是逻辑并行,物理串行。

 

既然CPU是串行的,那么为什么会有多线程这个概念出现呢?

 

我们都知道,CPU的运行速度非常的快,而往往业务的处理都需要多次的IO操作,IO是一个耗时的操作,在线程的IO时间,CPU是空闲的。在这种情况下,我们运行多个任务多个线程,那么在进程A需要进行IO等操作时,CPU空闲就可以进行进程B的相关操作,而不是像串行的那样一定要线程A运行完了才能运行线程B,这也就提高了CPU的利用率。

 

多线程就一定是提高CPU的利用率吗?

 

不,当线程的业务处理几乎全部都是CPU内部运算的,几乎不用IO。那么单线程处理起来会更快,毕竟多线程处理会存在线程切换,这必然会带来一定的开销。

随着技术的快速发展,单核CPU几乎已经被多核CPU所取代了,也就是说,多个CPU同时对线程进行业务处理,这就真正的达到了逻辑并行,物理也并行了。

 

CPU的线程调度

 

线程调度是指按照特定的机制为多个线程分配CPU的使用权

 

调度的模式有两种:分时调度和抢占式调度。

 

分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间。

 

抢占式调度是根据线程的优先级别来获取CPU的使用权。

 

上面也提到了,每个进程的内部,程序代码自己处理该进程内部线程的时间分配。以JAVA为例,在Java程序中,JVM负责线程的调度,JVM的线程调度模式采用了抢占式模式。既然是抢占调度,那么我们就能通过设置优先级(wait、sleep等)来控制线程的运行顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值