스레드(Thread)의 적정 개수

J.Noma·2022년 2월 14일
0

컴퓨터 공학

목록 보기
17/18
post-custom-banner

Q. 병렬처리가 가능한 작업(ex. 네트워크 로딩)이 3000개만큼 한 번에 요청되었고, 결과 전체를 당장 요구하는 상황을 가정하자. 디바이스마다 스레드를 몇 개 사용하는 것이 최적일까?

우리는 복수의 스레드를 사용하여 이런 작업들을 보다 효율적으로 처리할 수 있다. 하지만, 스레드를 무작정 양산하는 것은 스레드 관리비용(ex. 스레드생성/해제, context switching 등)에 의해 오히려 비효율을 유발할 수 있다. 그렇다면 도대체 몇 개가 적당할까?

🔸 기준1. CPU 코어 수

소프트웨어 레벨에서 아무리 스레드를 많이 생성하더라도 진정하게 병렬처리될 수 있는 스레드 개수는 CPU의 코어 수와 동일하다. 디펜던시가 없는 작업들에 대해선 코어 수에 비례하여 throughput을 향상시킬 수 있다

🔸 기준2. 대기시간

지연시간이 긴 3개의 작업을 3개의 스레드로 돌리는 것과 1개의 스레드로 돌리는 상황에서의 throughput을 생각해보자

위 그림을 통해 유후시간이 길다면 스레드 개수를 늘리는게 큰 메리트가 없음을 알 수 있다. 따라서 스레드 개수를 정하는 기준으로 대기시간과 대기시간의 비율을 따지는 것이 필요하다

🔸 결론

다수의 책에서 언급되는 아래와 같은 계산식이 도출된다

적정 스레드 개수 = CPU 코어 수 * (1 + 대기시간/작업시간)

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 12월 19일

글에서 유휴시간이 늘면 스레드 개수를 늘리는게 큰 메리트가 없다고 하셨는데.. 맨 아래 식을 보면 (대기시간 / 작업시간) 에서 대기시간(유휴 시간)이 늘면 스레드 개수가 늘어나지 않을까요...?
싱글 스레드 그림이 저게 맞을까요..?

답글 달기