![A의 표준 출력을 B로 병렬화해도 안전한가요?](https://linux55.com/image/37905/A%EC%9D%98%20%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20B%EB%A1%9C%20%EB%B3%91%EB%A0%AC%ED%99%94%ED%95%B4%EB%8F%84%20%EC%95%88%EC%A0%84%ED%95%9C%EA%B0%80%EC%9A%94%3F.png)
나는 뛰고있어 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)에 하드 코딩된 리소스입니다.
하지만 대부분의 프로그램에서는아니요사례. 따라서 병렬로 실행하는 것이 안전합니다.