GNU 패럴렐

GNU 패럴렐(parallel)은 리눅스 및 기타 유닉스 계열 운영체제용 명령줄 유틸리티로, 사용자가 셸 스크립트나 명령어를 병렬로 실행할 수 있게 해준다. GNU 패럴렐은 자유 소프트웨어이며, 올레 탄게가 펄로 작성했다. GPLv3 조건에 따라 사용할 수 있다.

 사용법 
섬네일|소개 영상, 1부
섬네일|소개 영상, 2부

가장 일반적인 용도는 셸 루프를 교체하는 것이다. 예를 들어
while read x; do
    do_something "$x"
done < list
를 다음과 같은 형태로 바꿀 수 있다.
parallel do_something < list
여기서 list 파일은 do_something에 대한 인자들을 포함하고 있으며, process_output은 비어 있을 수 있다.

패럴렐을 사용하는 스크립트는 종종 pexec를 사용하는 스크립트보다 읽기 쉽다.

패럴렐 프로그램은 다음과 같은 특징도 갖추고 있다.
 표준 출력 및 표준 오류를 그룹화하여 병렬로 실행되는 작업의 출력이 서로 섞이지 않도록 한다.
 출력 순서를 입력 순서와 동일하게 유지한다.
 공백, 단일 인용구, 이중 인용구, 앰퍼샌드(&) 및 UTF-8 인코딩 문자와 같은 특수 문자가 포함된 파일 이름을 적절하게 처리한다.
기본적으로 패럴렐은 CPU 코어 수만큼 작업을 병렬로 실행한다.

 예시 

find . -name "*.foo" | parallel grep bar

위의 명령은 다음과 같은 병렬 등가물이다.

find . -name "*.foo" -exec grep bar {} +

이 명령은 현재 디렉터리와 그 하위 디렉터리에서 이름이 .foo로 끝나는 모든 파일 내의 bar 문자열을 검색한다. 파일 이름에 새줄 문자가 포함되어 있지 않는 한 패럴렐 명령은 예상대로 작동한다. 이러한 제한을 피하려면 다음과 같이 사용할 수 있다.

find . -name "*.foo" -print0 | parallel -0 grep bar

위의 명령은 널 문자를 사용하여 파일 이름을 구분한다.

find . -name "*.foo" | parallel -X mv {} /tmp/trash

위의 명령은 명령줄 길이가 허용하는 만큼 많은 인자로 {}를 확장하며, 필요한 경우 병렬 작업 사이에 균등하게 분배한다. 이는 실행하는 데 걸리는 시간보다 시작하는 데 걸리는 시간이 더 짧은 수명이 짧은 명령의 프로세스 오버헤드를 낮출 수 있다.

find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media

위의 명령은 다음과 동일한 작업을 수행한다.

cp -v -p *.ogg /home/media

그러나 find/parallel/cp를 사용하는 전자의 명령이 자원 효율성이 더 높으며, *.ogg의 확장이 셸에 너무 커서 발생하는 오류로 인해 중단되지 않는다.

 같이 보기 
 Xargs
 pexec
 GNU 큐

 각주 

 외부 링크 

 GNU 패럴렐 프로젝트 페이지 및 매뉴얼 페이지

분류:GNU 프로젝트 소프트웨어
분류:펄로 작성된 자유 소프트웨어
분류:리눅스 프로세스 및 작업 관리 관련 소프트웨어