多线程并发的性能问题和解决方法

本文探讨了多线程并发带来的性能问题,包括上下文切换、内存同步和线程阻塞等额外开销。重点分析了锁竞争作为主要开销,并提出减少锁竞争的策略,如缩小锁范围、减少锁粒度、锁分段和避免热点域。同时,介绍了使用读写锁和原子变量等替代锁的方法,以提高并发性能和系统可伸缩性。
摘要由CSDN通过智能技术生成

多线程与并发是为了提升性能,性能提升实际上就是使用更少的资源做更多的事情。

多线程并发出现的问题

多线程并发的目标是提升整体性能,但是使用多线程也会造成一些额外的开销,比如线程之间的协调、上下文切换、线程的创建和销毁、线程调度。如果多线程的性能比实现同功能的性能还差,那就是一个很糟糕的并发设计。

要想通过多线程并发来获得更好的性能,主要做好两个事情:更有效的利用现有处理资源、在出现新的处理资源时使程序尽可能地利用这些新资源,就是尽可能使CPU处于忙碌状态(并不是做无用功),最终的目标就是对资源充分的利用,充分有效的利用就能发挥资源的最大价值,就能最大的提高性能。比如程序是计算密集型可以通过增加处理器来提高性能,如果一个线程不能使CPU一直处于忙碌状态,那么就应该使用多线程使CPU处于忙碌状态。

可伸缩性

要获得更好的性能就需要有效的利用现有资源和利用新出现的资源,现有资源好充分利用,但是新出现的资源就不是那么好办了。所以当增加计算资源时(如CPU、内存、存储容量或者I/O带宽),程序的吞吐量或者处理能力能相应地增加是程序很最重要的功能也就是可伸缩性。

多线程的额外开销

上下文切换:如果可运行的线程数大于CPU的数量,那么操作系统最终会将某个正在运行的线程调度出来,从而使其他线程能够使用CPU,这将导致一次上下文切换,这个过程将保存当前运行线程的执行上下文,并将新调度进来的线程的执行上下文设置为当前上下文。

内存同步:多线程开发一般都会有synchronized和volatile等保证资源的可见性,这些关键字可能会使用一些特殊的指令内存栅栏(Men

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值