如何进行锁优化【理论】

如何进行锁优化【理论】

1、减少锁持有的时间
减少锁持有的时间指只在有线程安全要求的程序上加锁来尽量减少同步代码块对锁的持有时间
2.减少锁粒度
减少锁粒度指将单个耗时较多的锁操作拆分为多个耗时较少的锁操作来增加锁的并行度,减少一个锁上的竞争,减少锁的竞争后,偏向锁、轻量级锁的使用率才会提高,减少锁粒度最典型的案例就是concurrentHashMap中的分段锁
3、锁分离
锁分离指根据不同的应用场景将锁的功能进行分离,以应对不同的变化,最常见的锁分离操作就是读写锁,读读不互斥,写写互斥,读写互斥,既保证了线程的安全,又提高了性能
4、锁粗化
锁粗化值为了保证性能,会要求尽可能将锁的操作细化以减少线程持有的时间,但是如果锁分的太细,将会导致系统频繁获取锁和释放锁,这样对内存的损害将极大,在这种情况下,就建议把关联度强的锁集中起来处理,以提高系统整体的效率,这点虽然和减少锁粒度有点矛盾,但是这种情况还是需要因地制宜,没有最好的方法,只有最合适的方法
5、锁消除
在开发过程中经常会出现不需要使用锁的情况下误用了锁操作而引起性能下降,这多数是因为程序编码不规范引起的,这时,我们需要检查并消除这些不必要的锁来提高系统的性能【GC回收机制:当内存中存在长时间不用的内存时,GC会回收】

线程上下文切换

cpu利用时间片轮询来为每个任务都服务一定的时间,然后把当前任务的状态保存下来,继续服务下一个任务,任务的状态保持及再加载就叫做线程的上下文切换

其中的上下文是指线程切换时cpu寄存器和程序计数器的当前线程的信息

cpu寄存器:指cpu内部容量较小但速度很快的内存区域,寄存器通过对常用值(通常是运算的中间值)的快速访问来加快计算机程序运行的速度

程序计数器:是一个专用的寄存器,用于表明指令序列中cpu正在执行的位置,存储的值为正在执行的指令的位置或者下一个将被执行的指令的位置

引起线程上下文切换的原因
①:当前正在执行的任务完成,系统的cpu正常调度下一个任务
②:当前正在执行的任务遇到I/O阻塞,调度器挂起此任务,继续调度下一个任务
③:并发状态下,多个任务抢占锁资源,当前的任务没有抢到锁资源,被调度器挂起,继续调度下一个任务
④:用户的代码挂起当前任务,比如线程中的sleep或者wait方法,让出cpu
⑤:硬件中断

你可能感兴趣的:(如何进行锁优化【理论】)