본문 바로가기
💻 개발/Back-end

12/16 - TIL : - 쓰레드 무한정 개수 늘린다면?

by 컴쏘 2024. 12. 16.

 

쓰레드를 많이 쓸수록 항상 애플리케이션의 성능이 좋아질까? 

 

멀티스레딩의 성능애플리케이션의 특성에 따라 달라진다.

  • 전제 1: 애플리케이션이 더 작은 작업들로 나눠져 동시에 실행 가능한 경우.
  • 전제 2: 애플리케이션이 순차적으로 실행되어야 하거나 동시에 실행하기 어려운 성격이라면, 스레드 수를 늘려도 효과가 제한적이다.

 

| 스레드와 컨텍스트 스위칭 

 

  • 컨텍스트 스위칭 
    • CPU 코어에서 실행되던 스레드다른 스레드로 바뀌는 작업
    • 스위칭 작업은 애플리케이션 동작과 직접적인 관련은 없지만, 멀티스레딩을 위해 필요한 오버헤드(간접 비용)이다.
  • 스레드 수와 컨텍스트 스위칭
    • 스레드 수 증가 → CPU 코어당 경합 증가
    • 경합이 많아질수록 컨텍스트 스위칭 비용이 커지며 성능 저하 발생.
    • 결과적으로, 스레드 수를 무한정 늘려도 어느 순간 성능이 한계에 도달한다.

 

 

| CPU 바운드 vs I/O 바운드 

 

  • CPU 바운드 애플리케이션
    • CPU를 많이 사용하는 작업.
    • 스레드 수를 CPU 코어 수와 비슷한 수준으로 맞추는 것이 적합.
    • 과도한 스레드 수컨텍스트 스위칭 오버헤드 증가로 성능 저하.
  • I/O 바운드 애플리케이션
    • CPU가 대기 상태로 있는 시간이 많고 I/O 작업이 많은 경우.
    • CPU 코어 수의 2~3배 이상 스레드를 활용하면 성능 개선 가능.
    • 그러나 스레드가 지나치게 많아지면 오버헤드로 인해 성능 저하 발생.

 

 

 

요약해보자면...

 

  • 스레드 수와 성능의 상관관계는 컨텍스트 스위칭, 오버헤드, 애플리케이션 특성에 따라 결정된다.
  • CPU 바운드와 I/O 바운드 애플리케이션을 구분하고 이에 적합한 스레드 수를 설정해야 최적의 성능을 낼 수 있다.
  • 스레드 수를 조정할 때 컨텍스트 스위칭 비용을 고려하는 것이 중요하다.

 

 

 

따라서, 스레드 수를 무작정 늘리는 것은 성능을 높이는 방법이 아니다. 그렇기 때문에 애플리케이션의 특성을 분석하고 CPU 코어 수와 작업 부하를 고려해 최적의 스레드 수를 결정해야 한다.

 

 

 

 

참고 : 다음의 영상을 참고하였습니다.

'💻 개발 > Back-end' 카테고리의 다른 글

12/13 - TIL : Checked Exception, Unchecked Exception  (1) 2024.12.13
12/12 - TIL : 로깅 레벨  (1) 2024.12.12
12/9 - TIL : DDD 란?  (0) 2024.12.09
12/2 - TIL : Fallback  (0) 2024.12.02
12/1 - TIL : 모듈이란?  (0) 2024.12.01