美文网首页并发编程
并发情况如何提升同步代码块的性能

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

作者: xiaolyuh | 来源:发表于2019-08-20 19:40 被阅读13次

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

影响性能的因素

上下文切换

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

内存同步

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

提升性能的方法

减少锁的粒度

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

缩小锁的范围

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

锁分段

ConcurrrentHashMap就是典型的锁分段。

替换独占锁

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

相关文章

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

    使用并发编程的目标是为了提升系统性能,引入多线程后,其实会引入额外的开销,如线程之间的协调、增加的上下文切换,线程...

  • sychronized原理

    偏向锁适合在只有一个线程执行同步代码时,提升性能线程进入同步代码块是,会通过CAS(compare and swa...

  • Java16-4 死锁

    死锁有两种情况1、同步嵌套同步方法中嵌套同步代码块或同步代码块嵌套同步代码块出现的错误

  • 网站架构

    提升系统性能 扩容 加缓存来提升系统并发能力 使用队列进行流量削峰 异步并发机制提升吞吐量或者接口性能 高并发原则...

  • Java之同步代码块

    Java多线程的同步代码块 synchronized(对象){ 需要同步的代码 } 同步代码块可以解决安全...

  • 释放锁的三种情况

    1.执行完同步方法或同步代码块 2.在同步方法或同步代码块中调用wait方法 3.在同步方法或同步代码块中发生异常...

  • 并发编程之 CAS 的原理

    前言 在并发编程中,锁是消耗性能的操作,同一时间只能有一个线程进入同步块修改变量的值,比如下面的代码 如果不加 s...

  • 《Java并发程编程艺术》重点总结

    synchronized修饰的代码块同步执行,不在synchronized块中的代码会异步执行,因此推荐用同步代码...

  • 关于synchronized锁

    首先,以以下代码为例: 上例中使用synchronized关键字保证并发的时候只有一个线程访问代码块,会导致性能下...

  • Java代码块详解

    Java中代码块指的是用 {} 包围的代码集合,分为4种:普通代码块,静态代码块,同步代码块,构造代码块 普通代码...

网友评论

    本文标题:并发情况如何提升同步代码块的性能

    本文链接:https://www.haomeiwen.com/subject/sidmsctx.html