2016-06-28 1 views
1

마스터 bash 스크립트에서 "병렬화"하려고하는 여러 bash 스크립트가 있습니다.Unix 환경의 다중 스레드/병렬 Bash 스크립트

배쉬 스크립트 : 나는 (앰퍼샌드없이) 일반적으로 스크립트를 실행하고 앰퍼샌드와 내가 뭔가하지 않을 수 있다고 생각하는 저를 선도하는, 처리 시간에 다소의 차이를보고 있지 않다

#!/bin/bash 
SHELL=/bin/bash 

bash /home/.../a.sh & 
bash /home/.../b.sh & 
wait 
bash /home/.../c.sh & 
bash /home/.../d.sh & 
bash /home/.../e.sh & 
wait 
echo "Done paralleling!" 
exit 0 

가장 효율적으로 코딩되었습니다.

+0

병렬 인스턴스는 반드시 동일한 물리적 리소스를 사용해야하기 때문에 * 더 길어질 수 있습니다. 디스크 드라이브). Linux * (et al) *는 장면 뒤에서 매우 효율적인 버퍼링을 사용할 수 있기 때문에 * 단일 * 프로세스 인스턴스가 I/O 요청을 훨씬 더 효율적으로 처리 할 수 ​​있지만 "묻힌 경우 "많은 과정에서 같은 것을 더 많이 또는 더 적게 수행합니다.단순히 벤치마킹하기 만하면됩니다. 앰퍼샌드가 실제로 컴퓨터에서 인식 속도가 빨라지 지 않으면 아이디어를 포기하십시오. * "오, 좋은 생각 같았지 만 ..."* –

+0

병렬 작업에 대한 더 많은 작업을 원하시면 GNU Parallel을 살펴보십시오. 그것은 당신을 위해 병렬 처리 작업을 많이 할 것이고 생산 품질입니다. –

답변

1

고전적인 컴퓨터 과학 이론에서 자원 충돌은 "스 래싱"이라고합니다.

(5 메가 바이트 디스크 드라이브가 작은 세탁기의 크기 일 때 우리는 Maytag 세탁기처럼 보이기 때문에 "Maytag Mode"라고 불렀습니다.

경쟁으로 인해 발생하는 성능 곡선을 그래프로 표시하면 위쪽으로 기울어 진 다음 갑자기 "팔꿈치"모양을 갖게됩니다. 즉, 이 기하 급수적으로 위로 이동합니다. 우리는 이것을 "벽에 부딪쳤다"고 부릅니다.

흥미로운 점은 바이올린 주위-와이 스크립트 에 (그냥 궁금하면 ...) 여러 장소에서 wait 문을 넣어하는 것입니다. (이 작업을 올바르게 수행했는지 확인하십시오.)두 개의 인스턴스를 실행하고 모든 인스턴스가 완료 될 때까지 기다린 다음 세 번 더 기다리는 식으로 진행하십시오. 그 것이 유용하게 더 빠르다면, 만약 그렇다면 세 가지를 시도하십시오. 등등. "달콤한 자리"를 찾을 수 있습니다.

아니면 ... 아닙니다.

1

가능성이 큽니다. 병렬 처리를 사용하면 여러 자원을 병렬로 사용할 수 있습니다. 그 리소스가 당신의 제한 요소 인 경우에만 속도가 향상됩니다.

예를 들어 디스크에서 읽는 경우 디스크에서 읽는 동작이 제한적이며 디스크를 읽기만하면 더 많은 일을하는 것이 도움이되지 않습니다. 실제로 충돌이 발생할 수 있기 때문에 프로세스 속도를 늦추십시오. (디스크는 단지 '점점 켜져 있고 읽기를 직렬화하는 것보다) 여러 프로세스를 처리해야합니다.

그래서 실제로는 의 스크립트가이고 그 이유는 무엇입니까? 그리고 그것을 확인하는 가장 좋은 방법은 그것을 프로파일 링하는 것입니다.

기본적으로 truss 나 strace와 같은 것이 도움이 될 수 있습니다.

strace -fTtc /home/../e.sh 

그리고 어떤 유형의 시스템 호출이 있고 얼마나 많은 총 시간을 소비하는지 확인하십시오.