首页 >

异步编程 – php如何异步地执行代码?

后端开发|php教程异步编程 - php如何异步地执行代码?
php,异步编程
后端开发-php教程
比如要记录些日志数据,我并不需要实时入库,我想代码异步执行后立马执行下面的代码,我也并不需要回调处理,如果把数据发给消息队列,这也需要时间吧,我想在毫秒级就继续下面的代码了,至于他把数据传给谁,入库花了多少时间我并不关心,举个例子,
echo 1;
log(数据);
echo 2;
我想log函数后台执行,至于花多少时间,我不管,但是我不用去等待他,对于我来说就是毫秒级执行完了似的。
微信小程序仿哔哩哔哩源码,94352z ubuntu,git的爬虫软件,php pinyin,莘县seo报价lzw
交易网站源码,ubuntu的时间矫正,如何暂停Tomcat7,python爬虫分析,武汉驻场开发 php,下列选项中不属于seo优点的是lzw
回复内容:
菜谱 源码 php,开启ubuntu桌面环境,tomcat初始化节点失败,网络爬虫相关论文,黑龙江php网站搭建,seo排名亚马逊lzw
比如要记录些日志数据,我并不需要实时入库,我想代码异步执行后立马执行下面的代码,我也并不需要回调处理,如果把数据发给消息队列,这也需要时间吧,我想在毫秒级就继续下面的代码了,至于他把数据传给谁,入库花了多少时间我并不关心,举个例子,
echo 1;
log(数据);
echo 2;
我想log函数后台执行,至于花多少时间,我不管,但是我不用去等待他,对于我来说就是毫秒级执行完了似的。

发给消息队列 VS 毫秒级别 >>> 矛盾点在哪里?

用 Redis 可以做队列吧,Redis 操作每秒读写上万次 ,你把消息放到 Redis 里面也就 1次写操作吧,时间消耗低于毫秒吧。
所以我觉得 使用队列,完全可以达到你说的毫秒级的需求吧。

另外,不管通过何种手段执行异步操作,总要伴随时间开销,不可避免。

//程序被阻塞10秒shell_exec('timeout 10 vmstat 1 >/dev/null 2>&1 &');//程序不会被阻塞pclose(popen('timeout 10 vmstat 1 >/dev/null 2>&1 &', 'r'));//因此可以异步执行任务pclose(popen("timeout 60 php /path/to/task.php '$arg' >/dev/null 2>&1 &", 'r'));

其中变量$arg是传递给脚本task.php的参数,task.php里通过$argv[1]拿到这个参数.
timeout 60 表示task.php脚本的最大执行时间60秒,不需要的话可以去掉.
pclose(popen())实现异步的本质是打开一个进程去执行阻塞代码,
适用于不要求执行完成后自动返回结果(回调)的异步场景.

字符串参数$arg可以用单引号括起来,可以避免一些空格的影响,但还是有缺陷.
字符串参数最好还是serialize序列化到文件,
然后给脚本task.php传文件路径这个参数,
让task.php自己读文件unserialize反序列化拿数据.
文件名应该做到唯一,比如可以是用户ID或者进程PID加上时间随机数:

$filename = md5(uniqid($uid.'_',        true));$filename = md5(uniqid($getmypid().'_', true));

异步编程 - php如何异步地执行代码?
  • 详谈javascript异步编程【javascript】
  • 详谈javascript异步编程【javascript】 | 详谈javascript异步编程【javascript】 ...

    异步编程 - php如何异步地执行代码?
  • curl - php不装扩展如何实现异步操作
  • curl - php不装扩展如何实现异步操作 | curl - php不装扩展如何实现异步操作 ...

    异步编程 - php如何异步地执行代码?
  • javascript异步是什么?有什么用?
  • javascript异步是什么?有什么用? | javascript异步是什么?有什么用? ...