并发编程 基础篇

参考 : <<Java 并发编程的艺术>> -方腾飞 魏鹏 程晓明

无论是单机还是分布式环境,多线程无处不在,
如果用人来比作线程的话,一个公司不可能只有一个人,一个团队不可能只有一个人
1.那么多线程一定是快的吗?
为什么会有这个疑问?
难道多个人一起来做某件事情效率还比不上一个人吗?
我们来看 cpu对于多线程的处理机制:

cpu通过时间分片法来循环执行任务,cpu定好一个固定的时间片,在这个时间片内执行线程的任务。如果在时间片内任务未执行完成,则会保存当前线程的状态,然后切到另外一个任务(线程)。
从当前任务在时间片内未执行完成到cpu保存当前任务状态,再到切换回这个任务的过程就是一次上下文切换
上下文切换会给cpu带来一定效率上的损失,影响多线程的执行速度

回到问题1,书中给出的demo只是对数字进行累加。
得出结论

百万次以下的操作中,并发执行速度回比串行执行累加的速度慢。

相对于累加这种比较简易的操作,实际项目中线程中执行的任务可能更加复杂,查询,排序,通信之类,这种情况多线程一般会更加快速

2.如何减少上下文切换?

  • 无锁并发编程
  • CAS算法
  • 使用最少线程
  • 协程,在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值