bash 에서의 멀티 쓰레드 구현

bash 는 단순히 순차 실행이 되는 구조이기 때문에 일반적으로 싱글 쓰레드로 볼 수 있다 ‘ㅅ’a
하지만 실행속도 향상을 위해 다중실행하는것이 유리 하다면 그렇게 만들면 되겠다 ‘ㅅ’a

리눅스는 기본적으로 프롬프트에서 background 실행을 할수 있다.
보통 백업을 할때 ‘ㅅ’a

 

이걸 응용하여 단순실행용 스크립트와  여러 명령어를 실행하는 스크립트를 두개를 만들어서 구성 해야 하겠지만..

여기서는  list 어레이에 선언된 숫자 값을 각 쓰레드에서 sleep 하는걸로…..
최대 리미트 $th 에 선언된 8의 갯수 만큼 동시실행을 하고 기존 프로세스들이 종료될 경우 추가 실행을 하도록 하였다 ‘ㅅ’a

  1. 백그라운드로 돌아가는 명령어
  2. 이를 확인하는 jabs 명령어
  3. 프로세스 종료를 기다리는 wait 명령어

위와 같은 명령어 조합으로 멀티쓰레드 구현이 간단히 되었다. 🙂

8쓰레드 의 단순 성능향상은 8배 이겠지만 단순히 8개 동시 실행을 하고 먼저 실행된 애들이 종료되면 순차실행을 하기 때문에..
에러이 선언된 시간들은 총 64초 이지만 멀티쓰레드 구현을 했을때에는 14초가 걸릴것이다 ‘ㅅ’a

 

PS. 싱글쓰레드에서 4분 56초 걸리는 작업 ( BIND[named.conf/zone] -> Pdns query )을 멀티쓰레드로 구현했을때 1분 44초가 걸렸다 ‘ㅅ’a

2 thoughts on “bash 에서의 멀티 쓰레드 구현”

  1. 스크립트 성능 향상이 필요했는데 유용한 정보 감사합니다.
    19line에 오타가 있네요^^; wait $lestPIDs -> wati $lastPIDs

Comments are closed.