Thread/Thread Pool (쓰레드 풀)

Manx·2022년 4월 29일
0

spring

목록 보기
8/24

Tread (쓰레드)

  • 코드를 순차적으로 하나씩 실행하는 것
  • 한 번에 한 줄의 코드만 수행
  • 동시 처리가 필요하다면 쓰레드를 추가로 생성해야 함

쓰레드의 단점

  • 쓰레드를 생성하는 cost가 매우 비쌈 (요청마다 쓰레드를 생성하면 응답 속도가 늦어짐)
  • 컨텍스트 스위칭 비용 발생
  • CPU, 메모리 임계점을 넘은 쓰레드 생성으로 인한 서버 다운

Thread Pool (쓰레드 풀)

  • 필요한 쓰레드를 쓰레드 풀에 미리 생성한 후 관리한다.
  • 쓰레드 풀에 생성 가능한 최대치를 관리한다. (쓰레드의 개수 설정)

쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하는 비용이 절약되고 응답 속도 문제를 개선할 수 있다.
생성 가능한 쓰레드의 최대치가 있으므로 CPU, 메모리 임계점을 넘는 현상을 방지할 수 있다.

최대 쓰레드(max thread) 설정

WAS(Web Application Server)의 주요 튜닝 포인트
최대 쓰레드를 너무 낮게 설정하면, 서버 리소스는 여유롭지만 응답이 지연된다.
최대 쓰레드를 너무 높게 설정하면, CPU/메로리 리소스 임계점 초과로 인해 서버가 다운된다.
그렇다면 적정 숫자를 어떻게 찾을 수 있을까?

  • 로직의 복잡도, 서버 환경의 리소스를 고려한다 (상황에 따라 모두 다르므로 최적의 값을 찾기 힘듦)

  • 성능 테스트를 통해 어느 정도의 요청을 버틸 수 있는지 테스트한다. (주로 이 방법 많이 사용)

멀티 쓰레드에 대한 부분은 WAS가 처리하므로 개발자는 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다. (가장 좋은 점!)
다만, 멀티 쓰레드 환경에서 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용하여야 한다.


'스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한 님' 의 강의 내용을 정리한 것입니다.

profile
백엔드 개발자

0개의 댓글