并发请求时,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的锁机制
有点混乱,麻烦各位解答了,谢谢!
如果这个问题是因为学术原因而问,那你应该把文档都先好好读一遍
如果是为了实战需求想要解决方案,答案是绝大多数网站都到不了你描述的问题。一般 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!版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。