zoukankan      html  css  js  c++  java
  • Java公平与非公平锁分析

    一、公平锁:

    • 锁被释放后,只能队首线程获得锁,新来线程必须排到队尾。
    • 能较好的保证每个线程都获得执行机会,不会出现线程饥饿。
    • 吞吐量较低。

    二、非公平锁:

    • 锁被释放后,排队线程和新来线程一同争抢锁。
    • 不能保证每个线程都能获得执行机会,可能导致线程饥饿。
    • 吞吐量高出10倍。

    三、非公平锁吞吐量高的原因分析:

    1. 非公平模式下:锁被释放时若新来了线程,这个新线程不用阻塞排队,立马参与争抢,所以省去了新线程阻塞引起的上下文切换,减少了时间片和性能浪费。
    2. 公平模式下:从锁被释放到唤醒队首线程,再到队首线程转为可执行状态,再到真正获得执行机会,中间有一个不可忽视的时间间隔,这个间隔内CPU空闲了,所以吞吐量就下降了。

    四、实践建议

    1. 在大多数场景中非公平锁,能宏观地保证公平性,极少出现明显的饥饿。所以通常建议使用非公平模式,以获得更高的吞吐量。
    2. 面对耗时较长或对公平性有较高要求的任务,则建议使用公平锁。
    学习使我充实,分享给我快乐!
  • 相关阅读:
    Python字符编码补充
    shell脚本自动部署及监控
    【Linux】应用程序内存段布局
    【Linux】Core dump故障分析
    【Linux】GDB程序调试
    【Linux】小应用 大智慧
    【嵌入式】安装Linux系统到开发板
    【读书笔记】高效演讲
    【Linux】GCC编译
    【Linux】Linux 找回Root用户密码
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/14524733.html
Copyright © 2011-2022 走看看