쓰면 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
진행될 수 있습니다. 분할은 정상적으로 라인 수를 계산하는 것보다 더 많은 리소스를 소비 할 수 있습니다. 주의해서 사용하십시오.