我需要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。
答案 0 :(得分:3)
我写的东西,但没时间谈论......
承诺很美味,他们把一些通常相当复杂的东西变成非常简单的东西。
当我们谈论Javascript时,每个人都理解堆栈的概念;这就是动画以及我们在网上做的许多其他花哨的东西的运行方式。
实际上,我为pthreads编写promises的努力是尝试使线程像Javascript堆栈一样简单,每个人都理解。
恰好这种情况几乎完全符合您的需求:
$manager = new PromiseManager();
$promise =
new Promise($manager, new CalculateTheMeaningOfLife());
$promise
->then(
new AddTwo($promise))
->then(
new PrintMeaning($promise));
$manager->shutdown();
你必须使用对象而不是闭包(Zend的限制),但它是promises模式,它是完全异步和管理的。
这是PHP,所以可以和作曲家一起安装......如果你喜欢那种东西......