美文网首页
04.性能问题

04.性能问题

作者: 0x70e8 | 来源:发表于2018-08-08 10:01 被阅读0次

性能问题

尽管使用多线程的初衷是提高性能,但与单线程的方法相比,多线程会引起一些额外的开销。造成这些开销的操作包括:

  • 线程之间的协调
  • 线程上下文切换
  • 线程的创建和销毁
  • 线程调度

并发编程的性能开销主要包括以下方面:

  • 线程上下文切换

上下文的切换发生在线程调度过程中,一个线程的时间片用完,将执行权限释放,下一个线程执行,为了使线程在下一次继续执行时能正确地继续,需要保存线程执行的状态,包括局部变量、PC值以及其他的栈数据。并且在新线程切入后,本地缓存数据是前面线程的,线程首次运行会相对缓慢,因为缓存命中基本没有。

  • 内存同步

主要是同步机制带来的开销,在锁和volatile提供的可见性保证时用到的内存屏障指令,会使本地缓存失效,也会限制处理器的优化(指令重排序)。
同步会增加共享内存总线上的通信量,总线的带宽是有限的,且所有的处理器共享这条总线。

  • 阻塞

另外由于锁机制的存在,一个获得时间片的线程可能会阻塞等待获取锁,等待的线程可能会自旋等待或者可能会被OS挂起,自旋等待如果在时间片内也没有获取到锁或者被挂起就导致一次无谓的上下文切换,且即使自旋等待等到了锁,线程也由于部分阻塞无法完整的使用时间片。

对策

针对以上的性能问题,主要有以下几个缓解方法

  • 减少锁的竞争(减少独占)

主要包含:

  • 缩小锁的范围
  • 降低锁的粒度,如分段锁
  • 减少独占锁
  • 减少上下文切换的开销

参考资料

[1] Java并发编程实战

相关文章

  • 04.性能问题

    性能问题 尽管使用多线程的初衷是提高性能,但与单线程的方法相比,多线程会引起一些额外的开销。造成这些开销的操作包括...

  • Vue的性能优化

    定位应用的性能问题 Vue应用的性能问题可以分为两个部分:运行时性能问题,加载性能问题。和其他 web应用一样,定...

  • 性能问题

    1、性能问题:内存,内存泄漏,循环引用UI控件优化流畅性,帧率渲染,透明控件耗时操作电量,发热app大小,缓存dY...

  • 性能问题

    针对客户端,当在发送文件时,如果卡顿,怎么办,同时想聊天,当时程序我是基于多线程实现的,在客户端里,聊天时启动一个...

  • 性能问题

    网络相关 DNS预解析 DNS解析也是需要时间的,所以可以使用预解析预先获得域名对应的ip 缓存 对前端优化很重要...

  • 分析性能

    我们可以使用基准测试工具,例如Apache Bench和Siege找出性能问题.从中可以看出性能问题.如果性能问题...

  • Android性能优化

    Android性能优化 Android 性能优化的方法 性能问题一般分为3类 UI卡顿 内存问题 耗电问题 布局优...

  • 04. 初识并发问题

    Runnable接口的好处:避免了单继承的局限性,方便同一个类被多个线程使用。 会出现几个人买同一张票的问题

  • SQL查询优化

    如何获取有性能问题的SQL 通过用户反馈获取存在性能问题的SQL 通过慢查日志获取存在性能问题的SQL 实时获取存...

  • MySQL之SQL查询优化

    SQL查询优化 获取有性能问题的SQL 通过用户 通过慢查日志获取存在性能问题的SQL 实时获取存在性能问题的SQ...

网友评论

      本文标题:04.性能问题

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