并发的优缺点

https://blog.csdn.net/u011521203/article/details/80149669

随着多核CPU的发展,为并发编程提供了硬件基础。并发编程的形式可以为多核CPU的计算能力发挥到极致,性能得到提升。
对于复杂业务模型,并发编程更适合这种业务拆分

并发编程的缺点

1. 频繁的上下文切换

上下文的切换需要保存当前线程的状态,以便能够恢复之前的状态。这个切换非常损耗性能。

Lmbench3测量上下文切换的时长 vmstat测量上下文切换次数

减少上下文切换的方式:
  1. 无锁并发编程:可以参照concurrentHashMap锁分段的思想,不同的线程处理不同段的数据,这样在多线程竞争的条件下,可以减少上下文切换的时间。
  2. CAS算法,利用Atomic下使用CAS算法来更新数据,使用了乐观锁,可以有效的减少一部分不必要的锁竞争带来的上下文切换
  3. 使用最少线程:避免创建不需要的线程,比如任务很少,但是创建了很多的线程,这样会造成大量的线程都处于等待状态
  4. 协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换
2.线程安全

多线程编程时 很难把握临界区线程的安全问题,注意死锁的情况。
还有多个线程共享数据带来的与期望结果不符的情况:解决:同步机制

避免死锁
  1. 避免一个线程同时获取多个锁;一个线程一个锁
  2. 避免一个线程在锁内部占有多个资源:尽量一个锁只占用一个资源;一个线程一个资源
  3. 尝试使用定时锁,**lock.tryLock(timeOut),**当超时等待时当前线程不会阻塞;定时锁
  4. 数据库锁,加锁和解锁都要在一个数据库连接中,否则会解锁失败。
    数据库中的脏读 不可重复度 幻读等异常 还有JVM内存模型在原子性、有序性、可见性等方面带来的问题。

并发的优点

优点在之前就有提过: 充分利用多核CPU的计算能力,方便进行业务拆分,提升应用性能
另外一种总结:在速度、设计、资源利用三个方面有很大的优势:
**(1)速度:**同时处理多个请求,响应更快;复杂的操作可以分成多个进程(或线程)同时进行
**(2)设计:**程序设计在某些情况下更简单,也可以有更多的选择
(3)资源利用:CPU能够等待IO的时候能够做一些其他的事情

资料:https://blog.csdn.net/u011521203/article/details/80149669

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值