여러 CPU에서 스레드 을 사용하여 병렬 처리되는 단일 계산 처리 프로세스 X가 있습니다. 각 스레드는 스트림 출력을 생성하고 각 스트림 은 두 번째 프로세스 Y의 자체 인스턴스에 개별적으로 연결되어야합니다 (여기에는 스레드가 있기 때문에 만큼 많은 프로세스 Y가 실행됩니다). X와 Y는 각각 처리량이 상당히 좋도록 이진 형식을 쓰고 읽습니다. I/O 오버 헤드를 최소화하고이를 수행하는 가장 좋은 방법을 찾고 있습니다. 내 설정은 다음과 같습니다 순간 은 (단지 두 개의 스레드로 설명하지만, 일반적으로 나는 더 이상 팔을 것이다) : "리디렉션이 파일을 사용하여 9보다 큰 디스크립터 :스레드 별 스트림을 개별 프로세스에 연결하는 가장 좋은 방법
exec 4> >(programY > out.4)
exec 5> >(programY > out.5)
programX-that-writes-to-fd-4-and-5
exec 4>&-
exec 5>&-
하나의 문제는 bash는 수동 상태가 있다는 것입니다 쉘이 내부적으로 사용하는 파일 기술자와 충돌 할 수 있기 때문에 조심해서 사용해야합니다. " 이것은 명확하지 않습니다. 또 다른 문제는 해지를 설정하는 좋은 방법을 찾지 못했다는 것입니다. 현재 "lsof -c programY"를 사용하지만 해킹처럼 느껴집니다. 더 나은 또는 개선 된 솔루션이 있습니까? 여기서 '주어진'은 X가 멀티 스레드이며 계산 집약적이며 Y는 단일 스레드이며 계산 집약적이며 X의 각 스레드는 Y의 인스턴스에 연결되어야한다는 것입니다.
감사합니다. 후자는 제가 지금하는 일입니다. 파일 설명자에 대한 bash 경고에 대해 걱정합니다. 이는 두 시나리오에서 모두 적용됩니다. 그리고 이것이 이것이 일반적으로 문제에 대한 제멋대로 접근하고 있는지 궁금합니다. – micans
프로세스를 시작하는 프로그램은 bash의 내부 파일 설명자 사용을 파기 할 수 없습니다. 그러한 파일 디스크립터는 'exec on close'로 표시되므로 bash의 하위 프로세스에 상속되지 않습니다. (필자는 열려 있거나 닫힌 파일 디스크립터 (64 줄의 4 줄)마다'o' 또는'-'를 출력하는 간단한 프로그램 인'fd'를 가지고 있으며,'bash'가 열린 파일 디스크립터를 발견하지 못합니다. 대답의 코드를 검증하는 데 사용했다.) bX의 내부 설명자를 사용하더라도 프로그램 X가 완료된 후 곧바로 덮개 스크립트가 종료되면 문제가 발생하지 않는다고 생각합니다. –