Free Lines Arrow
본문 바로가기
Spring/spring framework 구현 스터디

[Spring] 멀티 쓰레드

by skahn1215 2021. 10. 5.
728x90
반응형

서블릿은 어떻게 실행될까?

  • 서블릿을 실행하는 주체는 쓰레드이다.
  • 쓰레드를 할당 받아 해당 서블릿을 쓰레드가 수행하게 된다.

 

 

쓰레드 란?

  • 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드다.
  • 쓰레드는 한번에 하나의 코드 라인만 수행한다.
  • 동시 처리가 필요하면 쓰레드를 추가로 생성해야 된다.

 

아래에 자세한 설명을 적어 뒀습니다.

https://vprog1215.tistory.com/166

 

[OS] 프로세스와 쓰레드 그리고 차이점

프로세스 프로그램의 실행 단위를 말한다. 프로그램의 인스턴스 라고 해도 된다. 프로세스의 구조 Code: 코드 및 상수가 기계어로 저장되는 영역이다. Data: 전역변수, Static 변수가 저장 되는 영역

vprog1215.tistory.com

 

 

단일요청 쓰레드

만약 쓰레드가 하나뿐이라면 어떻게 될까?

  • 1. 요청이 들어온다.
  • 2. 쓰레드를 할당한다.
  • 3. 서블릿을 쓰레드가 실행킨다.
  • 4. 서블릿에서 응답을 보낸다.

 

 

요청이 2개일 경우에는?

  • 쓰레드가 지연이 되어 계속 사용중일때
  • 요청이 들어오면 대기를 해야 된다.

 

 

해결법

그렇다면 쓰레드를 늘려야 된다고 생각 했을거다.
다음과 같은 방법이 있다.

  • 1. 요청마다 쓰레드를 생성한다.
  • 2. 쓰레드 풀에 쓰레드를 미리 생성해 둔다.

 

 

요청마다 쓰레드를 생성한다.

사실 좋은 방법이 아니다.

 

장점

  • 동시 요청을 처리 가능하다.
  • 리소스가 허용할 때 까지 처리 가능
  • 하나의 쓰레드가 지연되어도 다른 쓰레드는 정상동작 한다.

 

단점

  • 쓰레드 생성비용이 비싸다
     - 요청마다 쓰레드를 계속 만들면 응답속도가 느려진다.
  • 쓰레드는 컨텍스트 스위칭 비용이 발생한다.
  • 쓰레드 생성에 제한이 없다.
    - 무조건 생성하게 되면 메모리 사용량을 초과하여 서버가 죽을수 있다.

 

 

 

쓰레드 풀을 사용한다.

  • 쓰레드 풀이란 미리 쓰레드를 생성해 두는 공간을 말한다.
  • 쓰레드 풀에 생성가능한 쓰레드의 개수를 지정한다.
     - 톰캣을 최대 200개가 기본설정이다 

 

동작방식

  • 쓰레드가 필요시 미리 생성해둔 쓰레드를 사용한다.
  • 사용을 종료하면 쓰레드 풀에 반납한다.
  • 최대 쓰레드 개수를 넘기면 그뒤에 요청들은 대기한다.

 

장점

  • 쓰레드가 미리 생성되어 있어 생성, 종료 비용이 줄어든다.
  • 너무 많은 요청이 와도 기본요청들은 안전하게 처리가 된다.

 

 

쓰레드 관리

  • WAS 의 주요 튜닝 포인트는 최대 쓰레드 수이다.
  • 이값을 낮게 설정하면?
     - 요청이 많을때 처리 하는 수가 적어 응답지연이 된다.
  • 너무 높게 설정하면?
     - 메모리 사용량 초과로 죽을수 있다.
  • 장애가 생겼을떄?
    - 클라우드면 서버를 늘린다.
    - 그렇지 않으면 튜닝한다.

 

쓰레드의 적정 숫자

  • 로직의 복잡도 + CPU 메모리 + IO 리소스 를 고려 해서 정해야 된다.
  • 대략적으로 감을 잡고 성능테스트를 거쳐야 한다.

 

WAS의 멀티 쓰레드 지원

  • 사실 멀티 쓰레드에 대한 부분은 WAS가 처리 한다.
  • 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.
  • 개발자는 마치 싱글쓰레드 프로그래밍을 하듯 편리하게 소스 코드 개발
  • 멀티쓰레드 환경일때는 싱글톤 객체는 주의해서 사용하자
     - 멤버변수를 잘못사용하는 경우 망한다.

 

 

728x90
반응형

댓글