GNU 병렬 vs & (배경 의미) vs xargs -P


39

.sh스크립트를 사용하여 일련의 작업을 실행하는 것의 차이점 또는 장점 (있는 경우)에 대해 혼란 스럽습니다.GNU parallel

예를 들어 Ole Tange 의 답변 :

parallel ./pngout -s0 {} R{} ::: *.png

그들을 통해 루핑하는 것이 아니라 그들을 배경으로 &만든다.

예를 들어 frostschutz 의 답변 :

#copied from the link for illustration
for stuff in things
do
( something
  with
  stuff ) &
done
wait # for all the something with stuff

요컨대 그것들은 단지 구문 상 또는 실제적으로 다른가? 그리고 실제적으로 다른 경우 각각을 사용해야합니까?

답변:


46

백그라운드에 여러 작업을 배치하는 것은 단일 시스템의 여러 코어를 사용하는 좋은 방법입니다. parallel그러나 네트워크의 여러 서버에 작업을 분산시킬 수 있습니다. 보낸 사람 man parallel:

GNU parallel은 하나 이상의 컴퓨터를 사용하여 병렬로 작업을 실행하기위한 쉘 도구입니다 . 일반적인 입력은 파일 목록, 호스트 목록, 사용자 목록, URL 목록 또는 테이블 목록입니다.

단일 컴퓨터에서 실행하는 경우에도 parallel작업이 병렬화되는 방식을 훨씬 효과적으로 제어 할 수 있습니다. man페이지 에서이 예제를 보자 .

   To convert *.wav to *.mp3 using LAME running one process per CPU core
   run:

   parallel lame {} -o {.}.mp3 ::: *.wav

그래, 너도 똑같이 할 수있어

   for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done

그러나 더 길고 번거롭고 더 중요한 것은 .wav파일 이있는만큼 많은 작업을 시작한다는 것 입니다. 수천 개의 파일에서이 파일을 실행하면 일반 랩톱이 무릎에 닿을 수 있습니다. parallel반면에 CPU 코어 당 하나의 작업을 시작하고 모든 것을 깔끔하고 깔끔하게 유지합니다.

기본적으로 parallel작업 실행 방식과 사용 가능한 리소스 양을 미세 조정할 수있는 기능을 제공합니다. 이 도구의 강력한 기능을 실제로 보려면 설명서 나 최소한 제공되는 예제를 살펴보십시오.

단순한 배경 작업은 실제로 병렬 수준과 비교할 정교함 수준에 가깝습니다. 어떻게 parallel다른지 에 관해서 는 xargs, GNU 군중은 여기에 좋은 고장을 줍니다. 보다 두드러진 몇 가지 사항은 다음과 같습니다.

  • xargs는 특수 문자 (예 : 공백, '및 ")를 잘못 처리합니다.
  • xargs는 지정된 수의 작업을 병렬로 실행할 수 있지만 CPU 코어 수 작업을 병렬로 실행할 수는 없습니다.
  • xargs는 출력 그룹화를 지원하지 않으므로 출력이 함께 실행될 수 있습니다. 예를 들어 라인의 첫 번째 절반은 한 프로세스에서 왔고 마지막 절반은 다른 프로세스에서 온 것입니다.
  • xargs는 출력 순서를 유지하도록 지원하지 않으므로 xargs를 사용하여 작업을 병렬로 실행하는 경우 첫 번째 작업이 완료 될 때까지 두 번째 작업의 출력을 연기 할 수 없습니다.
  • xargs는 원격 컴퓨터에서 작업을 실행할 수 없습니다.
  • xargs는 컨텍스트 대체를 지원하지 않으므로 인수를 작성해야합니다.

1
좋은 대답입니다. 그것은 내가 추측 한 것을 확인합니다. 나는 parallel문법, 증오의 또 다른 새로운 브랜드의 페이스 페이스 롤을 싫어한다 . 그러나 코어 / 작업 간의 자동 밸런싱이 가치가 있다고 생각합니다 ...?
Stephen Henderson

3
semGNU Parallel 패키지의 일부를 살펴보십시오 . 구문 요구 사항에 더 적합 할 수 있습니다.
Ole Tange

1
@OleTange 들으 좋은 콜
스티븐 헨더슨

> xargs는 컨텍스트 대체를 지원하지 않으므로 인수를 작성해야합니다. --- 이것은 무엇을 의미 하는가? xargs -I %
raine

4
그것은 그 사실 parallel보다 더 강력 xargs하지만 비교가 아니라 바이어스된다. 예를 들어 xargs공백과 따옴표로 인한 문제를 피하기 위해 null로 끝나는 문자열을 입력으로 지원 -d하고 에뮬레이션 할 수도 있습니다 parallel(비교에서도 언급 됨). xargs -I가장 간단한 경우에 대한 충분한 컨텍스트 대체이며 일반적으로 머신의 코어 수를 알고 있습니다. 그룹화되지 않은 출력에 문제가 발생하지 않았습니다.
Sam Brightman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.