【多线程性能调优】多线程调优(下):如何优化多线程上下文切换?

  1. 竞争锁优化:在多线程编程中,锁其实不是性能开销的根源,竞争锁才是,锁的优化归根结底就是减少竞争;
    a. 减少锁的持有时间:可以将一些与锁无关的代码移出同步代码块,尤其是那些开销较大的操作以及可能被阻塞的操作;
    b. 降低锁的粒度:同步锁可以保证对象的原子性,我们可以考虑将锁粒度拆分得更小一些,以此避免所有线程对一个锁资源的竞争过于激烈,如锁分离、锁分段;
    c. 非阻塞乐观锁替代竞争锁:CAS;
  2. wait/notify 优化:使用 Lock 锁结合 Condition 接口替代 Synchronized 内部锁中的 wait / notify;
  3. 合理地设置线程池大小,避免创建过多线程:线程池的线程数量设置不宜过大;
  4. 使用协程实现非阻塞等待:协程完全由程序本身所控制,也就是在用户态执行;
  5. 减少 Java 虚拟机的垃圾回收:垃圾回收会导致上下文切换。

  上下文切换是多线程编程性能消耗的原因之一,而竞争锁、线程间的通信以及过多地创建线程等多线程编程操作,都会给系统带来上下文切换。除此之外,I/O 阻塞以及 JVM 的垃圾回收也会增加上下文切换。我们可以将上下文切换也作为系统的性能参考指标,并将该指标纳入到服务性能监控。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值