質問: Perlを使用してタスクの部分的な順序を並行して処理するにはどうすればよいですか? 部分的に順序付けられた一連のタスクがあります。各タスクでは、部分的な順序で厳密にその前に実行されているすべてのタスクを実行してから実行する必要があります。私は合計の実行時間を最小限にしようとするが、依存関係が完了する前にタスクを開始することなく、(前後に)関連しないタスクを同時に実行したい。 タスクは、(perl以外の)子プロセスとして実行されます。 Perlを使ってこのような問題を解決するにはどうしたらよいですか?どの並行性制御機能とデータ構造が利用可能ですか?
回答: 私は配列のハッシュを使用します。各タスクでは、すべての前提条件が対応する配列に記述されます。 ``` $prereq{task1} = [qw/task2 task3 task4/]; ``` 私は、完了したタスクを別のハッシュで保存してから、ちょうど ``` my @prereq = @{ $prereq{$task} }; if (@prereq == grep exists $completed{$_}, @prereq) { run($task); } ```