스레드 갯수를 정하는 방법(CPU bound, IO bound)

개념

Burst

  • 어떤 현상이 짧은 시간 안에 집중적으로 일어남
  • CPU Burst: 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간 
  • IO Burst: 프로세스가 IO작업을 요청하고 결과를 기다리는 시간

CPU bound 프로세스

  • CPU Burst가 다분한 프로세스 
  • 연산 작업이 많은 프로그램 (Ex.동영상 편집 프로그램, 머신러닝 프로그램)

IO bound 프로세스

  • IO Burst가 다분한 프로세스
  • 네트워크가 자주 사용되는 작업 (Ex.백엔드 API 서버)

 

CPU bound 프로그램에서 적절한 스레드의 개수

  • 일반적으로 코어의 개수 + 1을 넘어가면 안 됨 
  • 예를 들어, 듀얼 코어 CPU에 CPU bound 프로그램을 동작할 때 스레드 몇 개를 할당하는 것이 가장 좋을까?
  • 만약 4개의 스레드가 2개씩 하나의 코어로 할당이 되면 아래와 같은 모습
    • 각 코어는 Thread Context Switching을 할 때마다 CPU 리소스를 낭비
    • 따라서 많은 스레드를 둔다고 좋은 것만은 아님

프로세스에 4개의 스레드가 있을 때

  • 만약 2개의 스레드가 각 코어에 들어가면, 불필요한 Context Switching이 필요가 없어짐

프로세스의 두 개의 스레드가 있을 때

 

IO bound 프로그램에서 적절한 스레드의 개수

  • 구체적으로 정해진 가이드라인은 존재하지 않음
  • 기기 사양, 프로그램 특성을 고려하여 적절한 스레드 수를 찾아야함