乐观锁和悲观锁
乐观锁:冲突不会总是发生,所以在操作前不加锁,而是在更新数据时检查是否有其他线程修改了数据。如果发
现数据被修改了,就会重试。
悲观锁:次访问共享资源时都会发生冲突,所在在操作前一定要先加锁,防止其他线程修改数据。
乐观锁本质是‘无锁’,适合低竞争、追求吞吐量的场景;悲观锁是‘保底’,适合高竞争、逻辑复杂的场景。
在使用乐观锁遇到冲突时,我们通常采用 CAS 自旋重试。但如果自旋次数过多,我会考虑通过 限制重试次数 或者是 直接升级为悲观锁 来保护 CPU 资源,防止系统被循环重试拖垮。
现数据被修改了,就会重试。
悲观锁:次访问共享资源时都会发生冲突,所在在操作前一定要先加锁,防止其他线程修改数据。
乐观锁本质是‘无锁’,适合低竞争、追求吞吐量的场景;悲观锁是‘保底’,适合高竞争、逻辑复杂的场景。
在使用乐观锁遇到冲突时,我们通常采用 CAS 自旋重试。但如果自旋次数过多,我会考虑通过 限制重试次数 或者是 直接升级为悲观锁 来保护 CPU 资源,防止系统被循环重试拖垮。
全部评论
相关推荐
华灯初上i:给一个问题: 你觉得langchain写agent有什么优势嘛,使用过程中遇到了什么问题,怎么解决的。框架的取消机制如何实现的(推理取消和工具调用取消)。
点赞 评论 收藏
分享
查看7道真题和解析