并发编程之上下文详解

并发编程的一些概念

我们知道并发和并行两者表示的含义是不同的:
  • 并发:线程间竞争资源,同时只能执行一个
  • 并行:线程间不竞争资源,同时可以执行多个,线程互不干扰。

有些小伙伴可以不知道什么时候会用到多线程,我们只要记得一句话:当处于cpu浪费或者是需求需要时,适用多线程

上下文切换

即使是单核处理器也支持多线程执行代码,cpu通过给每个线程分配cpu时间片来实现这个机制(时间片是cpu分配各个线程的时间):当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载出这个任务的状态。 所以任务从保存到再加载的过程就是一次上下文切换(大约1ms)。总之,当多线程竞争锁时,就会引起上下文切换。
所以如何减少上下文切换?
- 无锁并发编程:当多线程处理数据时,可以用一些办法来 避免使用锁
- CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
- 使用最小线程:避免创建不需要的线程。
- 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值