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.