PHP-并行任务运行程序

PHP-并行任务运行程序,php,parallel-processing,Php,Parallel Processing,我需要一个PHP中的并行任务运行程序(很可能在windows-IIS7 fastcgi上),它有一个完整的实现。其接口应如下所示: $taskRunner = new ParallelTaskRunner(); $taskRunner->add(function () use ($sharedResource){ //task 1 }); $taskRunner->add(function () use ($sharedResource){ //task 2 });

我需要一个PHP中的并行任务运行程序(很可能在windows-IIS7 fastcgi上),它有一个完整的实现。其接口应如下所示:

$taskRunner = new ParallelTaskRunner();
$taskRunner->add(function () use ($sharedResource){
    //task 1
});
$taskRunner->add(function () use ($sharedResource){
    //task 2
});
$taskRunner->run(); //runs task 1, task 2 parallel
我做了一些研究:我知道可以并行运行PHP代码的技术——pthreads、pcntl、exec、gearman、curl multi等等

我需要回答的问题有:

  • 是否有可能使用这些技术中的任何一种来隐藏此实现?如何做到这一点(如果在实现细节中有一些高级解决方法)?有没有具有此功能的图书馆
  • 如何提取有关并行任务运行的信息?例如:
    task1:{a();b();}
    task2:{c();}
    ,我怎么知道函数的调用顺序是
    a();b();c()
    a();c();b()
    c();a();b()
  • 如果出现问题,如何调试任务
更新

我检查了许多可能的解决方案,最后得到了pthreads。使用线程比使用进程容易得多。。。唯一的缺点是它不支持xdebug。

承诺在PHP中使用pthreads 我写了一些东西,但没有时间谈论

承诺是美味的,它们使一些通常相当复杂的事情变得非常简单

当我们谈论Javascript时,每个人都理解堆栈的概念;这就是动画,以及我们在网络上做的许多其他有趣的事情是如何运行的

实际上,我为pthreads编写承诺的努力是试图使线程变得像Javascript堆栈一样简单,这是每个人都理解的

恰好,这件东西几乎完全符合您的需求:

$manager = new PromiseManager();
$promise = 
    new Promise($manager, new CalculateTheMeaningOfLife());
$promise
    ->then(
        new AddTwo($promise))
    ->then(
        new PrintMeaning($promise));

$manager->shutdown();
您必须使用对象而不是闭包(Zend的限制),但它是promises模式,并且是完全异步和受管理的

这是PHP,因此可以与composer一起安装。。。如果你喜欢那种东西


有没有办法在任务之间以某种方式共享变量(一些不可序列化的变量)?您可以看到AddTwo和PrintMeansing类都接受ooriginal promise对象并与它的成员一起工作。更新per@JoeWatkins,pThreads不应用于新项目。使用并行。