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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...