MySQL-并发请求时,php或web server的处理流程
有一个程序段的逻辑是这样的,环境是php+mysql
[伪代码]
$sql = "select is_true from db_tab where id=1 limit 1";//is_true默认为0
$data = mysql_fetch_array(mysql_query($sql));
$is_true = $data['is_true'];
/***** program1 ******
if(!$is_true){
echo 'xxxx';
$sql = "update db_tab set is_true=1 where id=1";
mysql_query($sql);
}
/***** program1 ******
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
1、PHP不是多线程。
2、请求是阻塞的。
3、流程:高并发下,都在请求mysql。mysql会按照先后,队列的形式,先进先出,过程是阻塞的。当一个请求完成后,释放锁,另一个请求开始UPDATE。
看来要学的还很多呀。。
1、php不是多线程……但是apache是多线程啊……mysql也支持多线程啊……所以多个连接在量不大的情况下基本不阻塞
2、请求的阻塞与否是有条件的——关键看阻塞瓶颈在哪里:一般来说,这个瓶颈在数据库写操作上……如果你的mysql是使用的MyISAM(是这个吧?忘记名字了)引擎,那么当写表的时候整个表会锁死,造成阻塞,如果你是个老实孩子,使用InnoDB引擎,当写表的时候,被写的行会锁死,相关的读写操作会阻塞