如何减少上下文切换?

什么是上下文切换?

上下文换指的是操作系统的核心,在CPU上对进程或者线程进行切换的意思。上下文切换过程中的信息被保存在进程控制块中的。

理解上下文切换

首先,大家不管在单核或多核处理器都支持多线程执行代码,然后CPU通过给每个线程分配CPU时间片来实现这个过程的。什么是时间片,时间片是CPU分配给各个线程的时间,时间片非常短。所以我们是平还是感觉不到,CPU不停切换线程执行,时间片一般就是几十毫秒,就那么一瞬间。

如何减少上下文切换

减少“上下文切换”常用有这种方法:无锁并发编程、CAS算法、使用最少线程和使用协程

  • 无锁并发编程:就是多线程竞争锁时,会引起上下文切换,多线程处理数据时,可以用一 些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。
  • CAS算法:Java的Atomic包使用CAS算法来更新数据,就是它在没有锁的状态下,可以保证多个线程对一个值的更新。
  • 使用最少线程:避免创建不需要的线程。
  • 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

上下文切换的消耗

下文切换,它是需要相当可观的处理器时间的。当在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间,所以时间是非常短,很多时候,我们是观察不到 变化的。因此,对于上下文切换,会给系统带来的是消耗大量的CPU时间。 

上下文切换带来的问题

除了进程需要上下文切换,其实还有一种上下文切换,那就是操作系统检测到中断、异常、系统调用时发生的,以及包括IO设备引起的中断,应用程序主动发起系统调用(如文件读写)等等。如果操作系统检测到中断异常系统调用的信号后,会通过中断向量表找到对应的处理程序,然后切换成处理程序进程,处理完成后再切换回来。

其实在系统调用时候,可能还会有用户态到内核态的切换,这个过程更加为复杂。在普通上下文,它会的开销比普通上下文切换代价更大了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值