Aの標準出力をBに並列化しても安全ですか?

Aの標準出力をBに並列化しても安全ですか?

私は走っていますA file | B --params > file.txt。処理速度を上げたかったので、parallel -j+0< a.txt同時に実行される20のジョブを使用しました。 a.txt にはすべてのコマンドが含まれています。

A file1 | B --params > file1.txt 

A file2 | B --params > file2.txt

A fileN | B --params > fileN.txt

この道は安全ですか?並行して実行すると、他のプログラムの標準出力が混乱しますか?

答え1

並行して実行すると、他のプログラムの標準出力が混乱しますか?

これは、すべて別々のファイルに書き込む別のプロセスである場合は該当しません。各インスタンスはB異なり、独自の場所に出力されます。

答え2

Bの各インスタンスが別のファイルに書き込んでいれば大丈夫です。しかし、このアプローチのセキュリティは最終的にBに依存します。

たとえば、過去にあなたのソリューションと同様の操作を実行しようとすると、誤ってコード化されたプログラムに閉じ込められたことがあります。私の場合、プログラムはベースの一時ファイルを使用して書き込みsrand(time(NULL))ます。rand()10個のプログラムインスタンスが同時に起動すると、大きな混乱が発生する可能性があります。なぜなら、すべてが同じ一時ファイルに書き込むからです。

プログラムにこのようなエラーが含まれておらず、いくつかの固定パスに書き込まない限り、それは問題ありません。

答え3

これが唯一のケースです。いいえ安全なのは、AまたはBライター(/ etc / passwdなど)にハードコードされたリソースです。

しかし、ほとんどのプログラムではいいえケース。したがって、並列に実行するのは安全です。

関連情報