php - 高并发下悲观锁与乐观锁的选择问题

查看:249
本文介绍了php - 高并发下悲观锁与乐观锁的选择问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

说说我的看法,不对的地方请指正。

乐观锁的实现原理是cas操作,java中轻量级锁也是基于cas实现的。

悲观锁最大的问题就是阻塞问题。

在深入理解java虚拟机中提到,轻量级锁一般情况下是优于重量级锁(互斥锁)的;如果在高并发锁竞争比较激烈的情况下轻量级锁会由于长时间自旋消耗cpu 从而使得轻量级锁的性能比传统的重量级锁更慢。那么乐观锁中也有自旋和cas,所以高并发下乐观锁好像不是一种好的解决方案。

但是有些博文中提到 高并发下使用乐观锁更合适
比如这篇文章中就提到高并发数据库访问使用乐观锁
http://blog.csdn.net/amqvje/a...

问题1,高并发下如何选择?

问题2 乐观锁有什么缺点? 为什不都使用乐观锁。高并发下都是使用乐观锁,如果并发量不高,使用乐观锁感觉更不是问题

解决方案

简单的来说,一般情况下,乐观锁适合只有读没有写的操作,悲观锁适合于读写混合的操作。如果写操作非常简单短小,比如增加访问人数,也可以用乐观锁,或者不需要确保读到的数据是最新的时候。80%的情况下使用乐观锁确实是比较好的选择。

CAS依靠硬件CPU指令支持去实现原子级操作,所以高并发的情况下一般会更快,但是这个快不是没有缺点的,缺点就是有读也有写的时候,CPU缓存失效率可能会增加,除非你的CPU是单核的(非Intel平台的嵌入式)。

总而言之,要提升高并发性能,还是要实际测量出的数据说明问题,我上面提到的都是理论。希望对你有帮助。

这篇关于php - 高并发下悲观锁与乐观锁的选择问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆