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

.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

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



답변

백그라운드에 여러 작업을 배치하는 것은 단일 시스템의 여러 코어를 사용하는 좋은 방법입니다. 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는 컨텍스트 대체를 지원하지 않으므로 인수를 작성해야합니다.

답변