編集:より多くの応答を得ることを期待して、この C にタグを付けました。特定の言語の実装よりも、私が興味を持っているのは理論です。したがって、C コーダーである場合は、次の PHP を疑似コードとして扱い、C で記述された回答を自由に返信してください。
シリアルではなく並列でタスクを実行することにより、PHP CLI スクリプトを高速化しようとしています。タスクは互いに完全に独立しているため、開始/終了の順序は関係ありません。
元のスクリプトは次のとおりです (わかりやすくするために、これらの例はすべて省略されていることに注意してください)。
<?php
$items = range(0, 100);
function do_stuff_with($item) { echo "$item\n"; }
foreach ($items as $item) {
do_stuff_with($item);
}
以下に示すよう$items
に、並行して動作させることができました。pcntl_fork()
<?php
ini_set('max_execution_time', 0);
ini_set('max_input_time', 0);
set_time_limit(0);
$items = range(0, 100);
function do_stuff_with($item) { echo "$item\n"; }
$pids = array();
foreach ($items as $item) {
$pid = pcntl_fork();
if ($pid == -1) {
die("couldn't fork()");
} elseif ($pid > 0) {
// parent
$pids[] = $pid;
} else {
// child
do_stuff_with($item);
exit(0);
}
}
foreach ($pids as $pid) {
pcntl_waitpid($pid, $status);
}
今度はこれを拡張して、たとえば一度に最大 10 人の子供がアクティブになるようにします。これを処理する最良の方法は何ですか? 私はいくつかのことを試しましたが、あまり運がありませんでした。