• 第十一章 性能与可伸缩性


    1.当操作性能受某种特定的资源而收到限制时,通常称该操作为资源密集型的操作

    2.与单线程相比,多个线程总会引入一些额外的开销,比如:线程之间的协调(加锁、触发信号、内存同步等),增加的上下文切换,线程的创建与销毁,线程的调度。

      上下文切换:操作系统将某个正在运行的线程调度出来,从而使其他线程使用CPU。当一个新的线程被切换进来时,它所需要的数据可能不在当前处理器的本地缓存中,因而,线程首次调度运行时会更加缓慢。

      JVM实现线程的阻塞行为,会进行优化,采用自旋尝试,这时不释放CPU资源,避免了从阻塞中恢复的上下文切换开销。

    3.减少锁的竞争 

    1)缩小锁的范围(“快进快出”)

      JVM会优化掉不会发生竞争的锁,减少不必要的同步开销,缩小锁的范围,减少单个线程持有锁的时间。

    2)减少锁的粒度

      将一个锁分成多个锁,减少同一个锁的竞争。比如一个对象中多个独立的变量需要用锁保护,可以定义多个锁,而不是用对象本身当锁。

    3)锁分段

      锁分段的一个劣势在于,与采用单个锁来实现独占访问相比,要获取多个锁来实现独占访问将更加困难并且开销更高。

    4)使用共享锁代替独占锁

      

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    SqlServer_小工具_时间格式化
    SqlServer_小工具_字符填充(左)
    SqlServer_小工具_获取北京时间
    JS写入Json到CSV并下载
    写入数据到CSV
    写入数据到Excel
    批量插入数据
    Json填充Object工具
    Json|XMl|Object互相转化-小工具
    TODO:用python实现aws签名
  • 原文地址:https://www.cnblogs.com/walker993/p/9296161.html
Copyright © 2020-2023  润新知