开发者社区> 问答> 正文

并发请求时,php或web server的处理流程?? 400 报错

并发请求时,php或web server的处理流程?? 400 报错

有一个程序段的逻辑是这样的,环境是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 ******

执行:

当一个请求进来时,根据数据表[db_tab]的某个字段状态[!$is_true]处理[program1],处理完成更新该字段状态[is_true=1]

我的疑惑是,如果同时很多请求进来[并发],那么程序是怎么处理的

1.不定量的请求进入了[program1]

2.请求是阻塞的,只有第一条请求进入[program1]

是哪一种情况呢?1 或 2,还是其他 ?

还有,如果请求是阻塞的话,那么是谁在其控制作用?

1.由apache或nginx等web server进行请求阻塞

2.php本身

3.mysql的锁机制

有点混乱,麻烦各位解答了,谢谢!

展开
收起
爱吃鱼的程序员 2020-06-05 13:33:06 635 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    如果这个问题是因为学术原因而问,那你应该把文档都先好好读一遍

    如果是为了实战需求想要解决方案,答案是绝大多数网站都到不了你描述的问题。一般 mysql 的limit 是四百多万 concurrent connection,你先最先遇到的问题是内存。等你把其他先出现的问题都解决了,你也对底层的体系比较有了解了。

    ######回复 @binzone : 补充一下 mongodb 不能用一个用户一个connection的,至少不推荐。你的app一般保持有几个connections就可以了。一般多数drivers都会帮你处理pooling,比如我刚才说的 mongoose,可能是你用的driver不对,所以出现问题######回复 @binzone : 看你用的是什么 driver 了, node的话可以试试 Mongoose######感谢回答!想到这个问题是因为最近在做一个node+mongodb的项目,由于node本身的事件循环机制和nosql的一致性问题,在操作mongo的时候很小的并发量就出现这个问题了,由此想到php会怎么处理这个情况。关于底层认识确实还太浅了,有太多待学习的。anywhere, thank you!
    2020-06-05 13:33:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载