当前位置: 首页 > news >正文

网上书城网站开发的结论和不足昆明制作网站公司

网上书城网站开发的结论和不足,昆明制作网站公司,石家庄做网站哪家公司好,饰品网站模板用实例代码给大家介绍关于php多进程模拟并发事务产生的一些问题#xff0c;分享出来供大家参考学习#xff0c;下面话不多说了#xff0c;来一起看看详细的介绍吧数据表drop table if exists test;create table if not exists test (id int not null auto_increment ,count …用实例代码给大家介绍关于php多进程模拟并发事务产生的一些问题分享出来供大家参考学习下面话不多说了来一起看看详细的介绍吧数据表drop table if exists test;create table if not exists test (id int not null auto_increment ,count int default 0 ,primary key id (id)) engineinnodb character set utf8mb4 collate utf8mb4_bin comment 测试表;insert into test (count) values (100);// 进程数量$pro_count 100;$pids [];for ($i 0; $i $pro_count; $i){$pid pcntl_fork();if ($pid 0) {// 主进程throw new Exception(创建子进程失败: . $i);} else if ($pid 0) {// 主进程$pids[] $pid;} else {// 子进程try {$pdo new PDO(...);$pdo-beginTransaction();$stmt $pdo-query(select count from test);$count $stmt-fetch(PDO::FETCH_ASSOC)[count];$count intval($count);if ($count 0) {$count--;$pdo-query(update test set count . $count . where id 2);}$pdo-commit();} catch(Exception $e) {$pdo-rollBack();throw $e;}// 退出子进程exit;}}期望的结果期望 count 字段减少的量超过 100变成负数也就是多减实际结果并发 200 的情况下运行多次后的结果分别如下1. count 652. count 753. count 554. count 84...与期望结果相差甚远为什么会出现这样的现象呢解释首先清楚下目前的程序运行环境并发场景。何为并发几乎同时执行称之为并发。具体解释如下进程 过程 获取 更新1-40 同时创建并运行 100 9941-80 同时创建并运行 99 9881 - 100 同时创建并运行 98 97对上述第一行做解释第 1-40 个子进程的创建几乎同时运行也几乎同时进程 1 获取 count 100更新 99进程 2 获取 count 100更新 99...进程 40 获取 count 100更新 99所以实际上这些进程都做了一致的操作并没有按照预期的那样进程1 获取 count100更新 99进程 2 获取进程1更新后的结果 count99更新98...进程 99 获取进程 98更新后的结果count1更新0产生的现象就是少减了结论采用上述做法实现的程序库存总是 0。疑问那要模拟超库存的场景该如何设计程序呢仍然采用上述代码将以下代码if ($count 0) {$count--;$pdo-query(update test set count . $count . where id 2);}修改成下面这样if ($count 0) {$pdo-query(update test set count count - 1 where id 2);}结果就会出现超库存库存 100并发 200最终库存减少为 -63。为什么会出现这样的情况呢以下描述了程序运行的具体过程进程 1 获取库存 100更新 99进程 2 获取库存 100更新 98(99 - 1)进程 3 获取库存 100更新 97(98 - 1)....进程 168 获取库存 1 更新 0(1-1)进程 169 获取库存 1 更新 -1(0 - 1)进程 170 获取库存 1 更新 -2(-1 - 1)....进程 200 获取库存 1更新 -63(-62 - 1)现在看来很懵逼实际就是下面这条语句导致的$pdo-query(update test set count count - 1 where id 2);这边详细阐述 进程 1简称 a进程 2简称 b 他们具体的执行顺序1. a 查询到库存 1002. b 查询到库存 1003. a 更新库存为 99(100 - 1)这个应该秒懂4. b 更新库存为 98(99 - 1)- b 在执行更新操作的时候拿到的是 a 更新后的库存- 为什么会这样因为更新语句是 update test set count count - 1 where id 2以上内容希望帮助到大家很多PHPer在进阶的时候总会遇到一些问题和瓶颈业务代码写多了没有方向感不知道该从那里入手去提升对此我整理了一些资料包括但不限于分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6laravelRedisSwoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家需要戳这里PHP进阶架构师实战视频、大厂面试文档免费获取
http://www.pierceye.com/news/966955/

相关文章:

  • seo网站设计营销工具抽奖网站插件
  • 家装设计网站大全网站建设用哪个好
  • 青海企业网站建设企业建设网
  • 电子商务网站环境建设怎么劝客户做网站
  • 山西教育学会的网站建设网站投放广告教程
  • 游戏网站的设计方案做装修业务呢有多少网站
  • 口碑好网站建设公司电话百度联盟网站备案信息
  • 网站建设排行公司建筑网页设计详情
  • 德国的网站后缀技术支持 东莞网站建设母婴护理
  • 彩票娱乐网站建设wordpress 邮件推送
  • 如何申请网站备案如何选择邯郸做网站
  • 专注做一家男生最爱的网站北京旅游设计网站建设
  • c 做网站凡科网站免费版怎么做
  • 门户网站开发多少钱wordpress主题文章页面不显示
  • 网站建设丶金手指下拉13个人网站有什么用
  • 企业网站建设解决方案wordpress搜索不了中文linux
  • 怎样在网站上做有效的广告投放手机网站公司哪家好
  • 四川德行天下建设工程有限公司网站ie兼容所有网站
  • 网站seo诊断免费php源码网
  • 微信公众号商城网站开发湖南省新闻最新消息十条
  • 如何做网站家具导购做哈尔滨本地门户网站赚钱吗
  • 建立网站的步骤有哪些wordpress 主题
  • 网站功能建设中页面个体户做网站有用吗
  • 网站建设具体要求wordpress启用注册
  • 重庆好的网站建设公司车辆管理网站开发
  • 十大SEO网站外链建设误区城乡住房建设部网站保证金
  • 自己做一元夺宝网站dede 管理多个网站
  • 做app还是做微网站好聚美网站开发开题报告
  • 网站建设总结与科技网站建设+长沙
  • 网博士自助建站系统手机wap网站程序