并发编程

并发情况如何提升同步代码块的性能

2019-08-20  本文已影响13人  xiaolyuh

使用并发编程的目标是为了提升系统性能,引入多线程后,其实会引入额外的开销,如线程之间的协调、增加的上下文切换,线程的创建和销毁,线程的调度等等。过度或不恰当的使用,可能会导致多线程程序性能甚至比单线程还要低。

影响性能的因素

上下文切换

是指CPU 从一个进程或线程切换到另一个进程或线程。一次上下文切换花费5000~10000个时钟周期,几微秒。在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行。

内存同步

一般指加锁,对加锁来说,需要增加额外的指令,这些指令都需要刷新缓存等等操作。

提升性能的方法

减少锁的粒度

使用锁的时候,锁所保护的对象是多个,当这些多个对象其实是独立变化的时候,不如用多个锁来一一保护这些对象。但是如果有同时要持有多个锁的业务方法,要注意避免发生死锁。

缩小锁的范围

对锁的持有实现快进快出,尽量缩短持由锁的的时间。将一些与锁无关的代码移出锁的范围,特别是一些耗时,可能阻塞的操作。

锁分段

ConcurrrentHashMap就是典型的锁分段。

替换独占锁

在业务允许的情况下:
1、使用读写锁,
2、用自旋CAS
3、使用系统的并发容器

上一篇 下一篇

猜你喜欢

热点阅读