加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中并行执行函数

发布时间:2020-12-13 14:06:20 所属栏目:PHP教程 来源:网络整理
导读:PHP可以调用一个函数,不要等待它返回?所以这样的东西: function callback($pause,$arg) { sleep($pause); echo $arg,"n";}header('Content-Type: text/plain');fast_call_user_func_array('callback',array(3,'three'));fast_call_user_func_array('callb
PHP可以调用一个函数,不要等待它返回?所以这样的东西:
function callback($pause,$arg) {
    sleep($pause);
    echo $arg,"n";
}

header('Content-Type: text/plain');
fast_call_user_func_array('callback',array(3,'three'));
fast_call_user_func_array('callback',array(2,'two'));
fast_call_user_func_array('callback',array(1,'one'));

将输出

one (after 1 second)
two (after 2 seconds)
three (after 3 seconds)

而不是

three (after 3 seconds)
two (after 3 + 2 = 5 seconds)
one (after 3 + 2 + 1 = 6 seconds)

主脚本旨在作为一个永久的进程(TCP服务器)运行. callback()函数将从客户端接收数据,执行外部PHP脚本,然后根据传递给callback()的其他参数执行某些操作.问题是主脚本不能等待外部PHP脚本完成.外部脚本的结果很重要,所以exec(‘php -f file.php&’)不是一个选项.

编辑:
很多人都建议看一下PCNTL,所以似乎可以实现这样的功能. PCNTL在Windows中不可用,现在我没有访问Linux机器,所以我无法测试它,但是如果有很多人建议,那么它应该是诀窍:)

感谢大家!

在Unix平台上,您可以启用PCNTL功能,并使用 pcntl_fork分支进程并在子进程中运行作业.

就像是:

function fast_call_user_func_array($func,$args) {
  if (pcntl_fork() == 0) {
    call_user_func_array($func,$args);
  }
}

一旦你打电话给pcntl_fork,两个进程将从同一个位置执行你的代码.父进程将获得从pcntl_fork返回的PID,而子进程将获得0.(如果有一个错误,父进程将返回-1,这在生产代码中值得检查).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读