Ampは非ブロッキングI/Oを使用して並行性を実現します。 PHPはhttp://php.net/stream_set_blocking経由でそれをネイティブサポートしています。
AmpはCLIアプリケーションで使用できますが、Apache内などの他のSAPIで使用して、複数のサービスに対して複数の同時要求を行うこともできます。あなたはそれ以外の場合は同期アプリケーションに非同期を埋め込みたい場合は、そのためのAmp\Promise\wait
を使用することができます。
$uris = ["https://google.com/", "https://github.com/"];
$client = new Amp\Artax\BasicClient;
$promises = array_map(function ($uri) use ($client) {
return $client->request($uri);
}, $uris)
$responses = Amp\Promise\wait(Amp\Promise\all($promises));
アンプは通常、シングルスレッドです。 amphp/parallel
のようなものを使用するのは、マルチスレッドのみです。 amphp/parallel
は、pthreads
または複数のプロセスを使用して、複数のブロッキング処理を並行して実行できます。
さらに詳しい質問がある場合は、質問とコメントを編集してください。私はそれらに回答しようとします。
は、バックグラウンド処理については、はい、それはamphp/parallel
で可能ですが、元のプロセスは、そのために生き続けるために持っています。あなたはおそらく、amphp/process
にdisown
機構を実装して、親が死んだ場合にプロセスを実行しておき、ApacheまたはPHP-FPMの内部でも動作させることができます。
しかし、キューでは失敗したタスク(ワーカーがクラッシュした場合)を再開することができ、多くのバックグラウンドジョブがあると非常に負荷が高くならないため、このようなタスクのキューをお勧めします。それらのすべてがすぐに開始されるわけではなく、代わりに従業員が時間を過ごすときにバックグラウンドで処理されます。
Ampは、イベントループ、約束事、および非同期イテレータなどの並行性を管理するためのプリミティブを提供するPHPのための**並行性フレームワーク**です。 (リンクされたページから)。それはフレームワークを意味します。それがCLIで実行されるのかWebサーバーで実行されるのかに制限はありません。 – apokryfos