Edward_jie

for you, my Hall of Frame

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

定义:
悲观锁(Pessimistic Lock):
每次获取数据的时候,都会担⼼数据被修改,所以每次获取数据的时候都会进⾏加锁,确保在⾃⼰使⽤的过程中数据不会被别⼈修改,使⽤
完成后进⾏数据解锁。由于数据进⾏加锁,期间对该数据进⾏读写的其他线程都会进⾏等待。
乐观锁(Optimistic Lock):
每次获取数据的时候,都不会担⼼数据被修改,所以每次获取数据的时候都不会进⾏加锁,但是在更新数据的时候需要判断该数据是否被别
⼈修改过。如果数据被其他线程修改,则不进⾏数据更新,如果数据没有被其他线程修改,则进⾏数据更新。由于数据没有进⾏加锁,期间
该数据可以被其他线程进⾏读写操作。
适⽤场景:
悲观锁:⽐较适合写⼊操作⽐较频繁的场景,如果出现⼤量的读取操作,每次读取的时候都会进⾏加锁,这样会增加⼤量的锁的开销,降低
了系统的吞吐量。
乐观锁:⽐较适合读取操作⽐较频繁的场景,如果出现⼤量的写⼊操作,数据发⽣冲突的可能性就会增⼤,为了保证数据的⼀致性,应⽤层
需要不断的重新获取数据,这样会增加⼤量的查询操作,降低了系统的吞吐量。
总结:两种所各有优缺点,读取频繁使⽤乐观锁,写⼊频繁使⽤悲观锁。
像乐观锁适⽤于写⽐较少的情况下,即冲突真的很少发⽣的时候,这样可以省去了锁的开销,加⼤了系统的整个吞吐量。但如果经常产⽣冲
突,上层应⽤会不断的进⾏retry,这样反倒是降低了性能,所以这种情况下⽤悲观锁就⽐较合适,之所以⽤悲观锁就是因为两个⽤户更新同
⼀条数据的概率⾼,也就是冲突⽐较严重的情况下,所以才⽤悲观锁.
悲观锁⽐较适合强⼀致性的场景,但效率⽐较低,特别是读的并发低。乐观锁则适⽤于读多写少,并发冲突少的场景
--------------------------------------------------------
作者:MDYmcn1992
链接:https://wenku.baidu.com/view/1317354f021ca300a6c30c22590102020740f21d.html
来源:百度文库
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2022-06-08 10:16  Edward_诺  阅读(90)  评论(0编辑  收藏  举报