쓰면 A | B두 프로세스가 이미 병렬로 실행됩니다. 하나의 코어 만 사용하는 것으로 보이면 CPU 선호도 설정 중 하나 (아마 선호도가 다른 프로세스를 생성하는 도구가 있음)이거나 하나의 프로세스로 전체 코어를 보유하기에 충분하지 않기 때문일 수 있습니다. 컴퓨팅을 퍼 뜨리지 않는 것이 좋습니다.
하나와 여러 B의를 실행하려면, 당신은 같은 도구가 필요 split와 --filter옵션 :
A | split [OPTIONS] --filter="B"
그러나 B 작업이 모두 같은 속도로 실행되지 않기 때문에 출력에서 줄 순서를 엉망으로 만들 수 있습니다. 이것이 문제인 경우, i 번째 출력을 중간 파일로 경로 재지 정하고를 사용하여 마지막에 함께 연결해야합니다 cat. 따라서 상당한 디스크 공간이 필요할 수 있습니다.
다른 옵션이 존재 (B의의 전체 "라운드"가 완료 A는, a의 동등한를 실행할 때까지 대기는 예를 들어 단일 라인 버퍼 출력 B의 각 인스턴스를 제한 할 수 감소 에 split의 지도 및 cat임시 출력 함께) 다양한 수준의 효율성. 예를 들어 방금 설명한 'round'옵션 은 B 의 가장 느린 인스턴스 가 완료 될 때까지 대기 하므로 B에 사용 가능한 버퍼링에 크게 의존합니다. [m]buffer작업이 무엇인지에 따라 도움이 될 수도 있고 아닐 수도 있습니다.
예
처음 1000 개의 숫자를 생성하고 행을 병렬로 계산하십시오.
seq 1 1000 | split -n r/10 -u --filter="wc -l"
100
100
100
100
100
100
100
100
100
100
행을 "표시"하면 각 첫 번째 행이 프로세스 # 1로, 각 다섯 번째 행이 프로세스 # 5 등으로 전송되는 것을 볼 수 있습니다. 또한 split두 번째 프로세스를 생성하는 데 걸리는 시간 에 첫 번째 프로세스는 이미 할당량에 좋은 방법입니다.
seq 1 1000 | split -n r/10 -u --filter="sed -e 's/^/$RANDOM - /g'" | head -n 10
19190 - 1
19190 - 11
19190 - 21
19190 - 31
19190 - 41
19190 - 51
19190 - 61
19190 - 71
19190 - 81
경우 2 코어 머신상에서 실행 seq, split상기 wc프로세스 코어를 공유하고; 그러나 자세히 살펴보면 시스템은 처음 두 프로세스를 CPU0에두고 작업자 프로세스간에 CPU1을 나눕니다.
%Cpu0 : 47.2 us, 13.7 sy, 0.0 ni, 38.1 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 15.8 us, 82.9 sy, 0.0 ni, 1.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5314 lserni 20 0 4516 568 476 R 23.9 0.0 0:03.30 seq
5315 lserni 20 0 4580 720 608 R 52.5 0.0 0:07.32 split
5317 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5318 lserni 20 0 4520 572 484 S 14.0 0.0 0:01.88 wc
5319 lserni 20 0 4520 576 484 S 13.6 0.0 0:01.88 wc
5320 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.85 wc
5321 lserni 20 0 4520 572 484 S 13.3 0.0 0:01.84 wc
5322 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5323 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.86 wc
5324 lserni 20 0 4520 576 484 S 13.3 0.0 0:01.87 wc
특히 split상당한 양의 CPU를 사용하고 있습니다. 이는 A의 요구에 비례하여 감소합니다. 즉, A가보다 무거운 프로세스 seq인 경우 상대적 오버 헤드 split가 줄어 듭니다. 그러나 A가 매우 가벼운 프로세스이고 B가 매우 빠르면 (A와 함께 유지하기 위해 2-3B를 넘지 않아도 됨) 병렬 처리 split(또는 일반적으로 파이프) 는 그만한 가치가 없을 수 있습니다.
A | B | C파이프의 특성으로 인해 (B는 A의 출력을 기다려야하고, C는 B의 출력을 기다려야 함) 파이프의 특성으로 인해 별도의 프로세스와 마찬가지로 병렬 이지만 일부 경우에는 여전히 선형 일 수 있습니다. 그것은 전적으로 그들이 어떤 종류의 생산을하는지에 달려 있습니다. 여러 개를 실행하면 많은B도움 이되는 경우가 많지 않지만 병렬 wc 예제가 일반보다 느리게wc진행될 수 있습니다. 분할은 정상적으로 라인 수를 계산하는 것보다 더 많은 리소스를 소비 할 수 있습니다. 주의해서 사용하십시오.