여러 하위 셸을 생성하여 파이프라인을 병렬로 실행

여러 하위 셸을 생성하여 파이프라인을 병렬로 실행

|나는 이 답변 에서 차이점을 읽었습니다.; https://unix.stackexchange.com/a/159492/318084;

두 개의 명령 A와 B를 고려하십시오. 당신이 글을 쓸 때

A | B
A와 B는 병렬로 실행되며 A의 표준 출력은 B의 표준 입력으로 전송됩니다.

이 단어가 헷갈리네요parallel

설명을 보니 이해가 되네요파이프(유닉스) - 위키피디아

Unix 계열 컴퓨터 운영 체제에서 파이프는 표준 스트림을 통해 함께 연결된 일련의 프로세스이므로 각 프로세스의 출력(stdout)이 입력(stdin)으로 다음 프로세스에 직접 전달됩니다.

파이프는 출력을 입력으로 다음으로 전달합니다.

그럼에도 불구하고 대답은 "병렬"입니다. 순차적이 아닌 동시에 실행됩니다.

이 메커니즘은 어떻게 작동합니까?

|상위 셸(내보내기 변수)의 A에서 변수를 가져오는 하위 셸을 생성한 다음 작업이 완료되면 자동으로 하위 셸을 닫아야 한다고 생각합니다 .

답변1

파이프는 스트림 처리의 예입니다. 파이프라인이 구축되면 데이터가 모든 프로세스에 도달하면 처리에는 여러 프로세스가 동시에 포함됩니다. 3개의 데이터 a b c와 2개의 프로세스 가 있다고 상상해 A보세요 B. 이제 다음 단계를 살펴보세요.

  1. a@A B- Enter a, 아직 안에 A아무것도 없습니다B

  2. b@A a@B- a통과 Bb입력A

  3. c@A b@B- 도착 시 c도착AbB

  4. A c@B-그게 A다야cB

아주 크다고 상상해 보세요 a. 너무 커서 한 번에 두 개의 요소만 기계에 존재할 수 있습니다. 순차적 처리에서는 먼저 처리한 다음 동시에 저장해야 합니다. 병렬 처리는 스토리지 요구 사항이 낮을 뿐만 아니라 여러 프로세서가 필요하다는 것을 의미합니다. 하지만 시간 분배를 통해 단일 프로세서에서 병렬 처리를 시뮬레이션할 수 있으므로 이는 필수는 아닙니다.bcAB

파이프라인의 각 단계는 서브셸에서 실행되는 별도의 프로세스입니다. 일반적으로 특정 프로세스 내의 출력은 버퍼링됩니다. 즉, 출력이 더 큰 청크로 전송된다는 의미입니다. 이는 작동을 최적화할 수 있지만 꺼져 있을 수 있으며 출력이 준비되자마자 사라집니다. 그러나 더 큰 덩어리가 있어도 여전히 평행합니다.

관련 정보