是否可以在不使用pthread
或pcntl
之类的扩展名的情况下并行运行两个方法?
我尝试了Symfony/Process,但似乎只能将其用于php cli编程。
我的要求是 php Web应用程序。我发现amphp/parallel表示无需任何扩展名即可使用。我尝试了以下示例。虽然我不知道该库是否提供了真正的并行功能或其他诸如排队任务?因为下面注释“没有任何扩展,并行处理是不可能的”。
在尝试amphp/parallel
之前,我想确定找到的库是否适合我的工作。假设我要并行运行两个方法test1()和test2(),并在下一行中使用这两个方法的结果。
<?php
require __DIR__ . '/../vendor/autoload.php';
use Amp\Parallel\Worker;
use Amp\Promise;
$urls = [
'https://secure.php.net',
'https://amphp.org',
'https://github.com',
];
$promises = [];
foreach ($urls as $url) {
$promises[$url] = Worker\enqueueCallable('file_get_contents', $url);
}
$responses = Promise\wait(Promise\all($promises));
foreach ($responses as $url => $response) {
\printf("Read %d bytes from %s\n", \strlen($response), $url);
test1(){
// do some database query
}
test2(){
// run a lengthy for loop
}