MySQL-并发请求时,php或web server的处理流程

发布于 2017-02-22 06:45:18 字数 423 浏览 1226 评论 3

有一个程序段的逻辑是这样的,环境是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-05-25 23:17:45

1、PHP不是多线程。
2、请求是阻塞的。
3、流程:高并发下,都在请求mysql。mysql会按照先后,队列的形式,先进先出,过程是阻塞的。当一个请求完成后,释放锁,另一个请求开始UPDATE。

晚风撩人 2017-05-10 22:08:16

看来要学的还很多呀。。

泛泛之交 2017-03-29 05:45:01

1、php不是多线程……但是apache是多线程啊……mysql也支持多线程啊……所以多个连接在量不大的情况下基本不阻塞
2、请求的阻塞与否是有条件的——关键看阻塞瓶颈在哪里:一般来说,这个瓶颈在数据库写操作上……如果你的mysql是使用的MyISAM(是这个吧?忘记名字了)引擎,那么当写表的时候整个表会锁死,造成阻塞,如果你是个老实孩子,使用InnoDB引擎,当写表的时候,被写的行会锁死,相关的读写操作会阻塞

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文