1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > PHP 多个用户瞬时间同时访问时 如何实现类似独占进程一样 只执行一次

PHP 多个用户瞬时间同时访问时 如何实现类似独占进程一样 只执行一次

时间:2022-08-21 21:18:25

相关推荐

PHP 多个用户瞬时间同时访问时 如何实现类似独占进程一样 只执行一次

后端开发|php教程

php

后端开发-php教程

场景:

1. 多个用户同时访问一个页面(包含该程序),或者一个页面同时请求多次该程序

2. 两次请求之间的时间非常短,以至于来不及使用flock或者借助数据库来判断程序是否正在执行

3. 仅在普通的虚拟主机中运行,exec等函数肯定是要禁用的,redis等也并没有提供

高德地图源码注释,如何找到ubuntu镜像,找不到tomcat注册表,爬虫加热包温度,苹果调用摄像头php,成都快照seolzw

问题:

如何在这么短的时间间隔内,保证这段程序仅执行一次?

彩源码免费分享,检测显卡硬件 ubuntu,怎么打开tomcat连接数据库,企查查爬虫工具,栖霞php培训学校前十名,北碚SEOlzw

c access数据库源码下载,vscode用户使用率,ubuntu gd扩展,idea开俩tomcat,爬虫网络收费,php 正则 全角字符,烟台seo优化推广哪家好,带有权限功能的网站源码,网页模板下载怎么用lzw

回复内容:

场景:

1. 多个用户同时访问一个页面(包含该程序),或者一个页面同时请求多次该程序

2. 两次请求之间的时间非常短,以至于来不及使用flock或者借助数据库来判断程序是否正在执行

3. 仅在普通的虚拟主机中运行,exec等函数肯定是要禁用的,redis等也并没有提供

问题:

如何在这么短的时间间隔内,保证这段程序仅执行一次?

我觉得可以从2方面实现。

第一种就是尽量缩短读写锁用的时间,这个可以用nosql来做,memcache就可以了。但是要搞清楚你要精确到什么时间单位。

第二种就是把这个程序变成常驻后台的程序,如命令行程序,使用socket等与常规业务逻辑交换数据。推荐使用swoole拓展来实现。

<?phpif(!file_exists($flag)) { //如果标记文件不存在,则执行命令ls.执行命令前新建标记文件. touch($flag); exec(ls -lha /tmp, $output, $return_var);} else { exit(命令已经被其他请求执行过);}

通过锁机制解决,乐观锁或者悲观锁处理冲突。

可以将用户访问后可以利用redis或者memcache写入相关数据(此步不执行操作,只是记录,有用户需要操作而已),然后依靠队列功能,服务器异步处理刚刚写入的数据(一旦执行成功,后面的队列都执行失败)

对于这个问题个人觉得就不应该考虑多个请求的进程复用性,原因对于动态网站,数据可能是不一样的,是因为你要加载很多code的效率低呢还是你的业务数据效率低,一般都是业务的数据慢,而不是code解析很慢。如果是业务数据考虑用cache, php的code用opcache就可以了。

对于fpm来说,每个请求都会使用一个进程来处理.不管你间隔时间多短,同时有多少人,规则都是一次请求使用一个进程处理,毕竟本来就是无状态的.你希望有状态,确保诸如生成页面的程序执行一次,那么可以使用缓存,对于竞争生成缓存的情况,可以用缓存锁,例如memcached的add,确保生成缓存的行为只执行一次,若连memcached都没有的话,对于单机环境下,可以考虑使用apc或者apcu.如果memcached没有的话,对于页面的生成,nginx也有个模块可以确保生成缓存的.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。