쓰레드풀과 포크조인풀

Red Culture·2021년 7월 23일
0

쓰레드풀

쓰레드풀은 프로세스가 할당 받은 메모리를 사용하는 쓰레드의 모음으로 제한된 자원을 가지고 최대한의 효율을 내기 위한 최적화 기법이다. 쓰레드는 필요할 때 마다 동일한 메모리 영역 내에서 생성/반납을 하는데 생성/반납에 드는 비용을 줄이고 재사용성을 높이기 위해 풀에 미리 쓰레드를 만들어두고 사용한다.

-프로세스: 운영체제로부터 자원을 할당받은 작업의 단위
-쓰레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

포크조인풀

하나의 task를 크기에 따라 더 작은 task로 분할하고 여러 쓰레드에게 task를 할당해준다. 분할된 task가 처리되면 다른 쓰레드에서 처리한 결과를 기다렸다가 합쳐서 상위의 task에게 리턴해주는 방식이다. task 분할이 중요하다.

상황을 통한 쓰레드 풀 활용 방법

풀 안에 쓰레드가 3개가 있고, 쓰레드가 처리해야할 Job 3개를 만들어서 쓰레드 풀에 준다고 가정해보자.

  • 쓰레드풀
    1) 쓰레드 풀은 Job 3개를 내부에 있는 쓰레드에게 할당해준다.
    2) 쓰레드드는 할당 받은 Job을 처리한다.
    여기서 만약 Job 3개 중 2개가 처리량이 작아 작업이 빨리 끝나면 유휴시간이 생겨 버린다. 다른 하나가 작업 중이어도 이미 끝난 2개의 쓰레드는 놀고 있는 상황이 되어 버린다.

  • 포크조인풀
    1) Job 3개를 감싸고 있는 상위 task에서 쓰레드1이 자신의 로컬 큐에 1차 분할을 한다.
    2) 쓰레드2는 놀고 있기 때문에 쓰레드1의 Job을 분할해서 일을 한다.
    3) 쓰레드3도 놀고 있기 때문에 쓰레드2의 Job을 분할해서 일을 한다.
    4) 쓰레드3의 작업이 끝나면 쓰레드2에게 결과를 전달하고, 쓰레드2는 쓰레드3의 결과를 받고 자신의 결과와 합쳐서 쓰레드1에게 전달한다. 쓰레드1이 최종적으로 결과를 합쳐서 작업을 마무리 짓는다.
    이렇게 쓰레드 3개가 골고루 일을 하게 되고 작업 시간도 비슷해진다.

*참고 자료
https://hamait.tistory.com/612

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글

관련 채용 정보