微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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('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,这在生产代码中值得检查).

原文地址:https://www.jb51.cc/php/131058.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐