쓰레드

  • 애플리케이션 코드를 순차적으로 실행하는 것은 쓰레드
  • 자바 메인 메서드를 처음 실행하면 main 쓰레드 실행
  • 쓰레드가 없으면 자바 애플리케이션 실행 불가능
  • 쓰레드는 한번에 하나의 코드 라인만 수행
  • 동시 처리가 필요하면 쓰레드 추가 생성

 

 

쓰레드가 하나일 때 발생하는 문제

- 상황 :

1) 요청1이 연결을 요청하고 서블릿 컨테이너에서 처리를 하는데 지연 처리 되는 중

2) 요청2가 연결을 요청하면서 쓰레드를 대기

3) 이러면 요청1, 요청2가 둘 다 죽게 됨

 

- 해결방법 :

요청2에 대한 신규 쓰레드를 생성해준다.

 

 

 

요청이 올때마다 쓰레드를 생성하면 발생하는 문제

- 장점

1) 동시 요청 처리 가능

2) CPU, Memory 가 허용할 때까지 처리가 가능

3) 하나의 쓰레드가 지연되어도 나머지 쓰레드는 정상 작동함

 

- 단점

1) 쓰레드는 생성 비용이 비쌈 ( 고객 요청올 때 마다 쓰레드 생성하면 응답속도가 느려짐 )

 ex. 수강신청 사이트에서 학생들이 수강신청을 갑자기 많이하면 쓰레드가 너무 많이 생성되 서버가 터짐

2) 쓰레드는 컨텍스트 스위칭 비용이 발생

3) 쓰레드 생성에 제한이 없음

 

 

 

쓰레드 풀

: 요청마다 쓰레드 생성의 단점 보완

 

- 특징

1) 필요한 쓰레드를 쓰레드 풀에 보관하고 관리

2) 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리 ( 톰캣은 최대 200개가 기본 설정 - 변경가능 )

 ex. tomcat 의 MaxConnection 관련 설정

 

- 사용

1) 쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에 꺼내서 사용

2) 사용 종료하면 쓰레드 풀에 해당 쓰레드를 반납

3) 최대 쓰레드가 모두 사용중이어서 쓰레드 풀에 쓰레드가 없으면?

 -> 기다리는 요청을 거절 or 특정 숫자만큼 대기하도록 설정

 

- 장점

1) 쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 비용이 절약됨 ( 응답이 빠름 )

2) 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청 안전하게 처리 가능

 

 

 

쓰레드 풀 실무 적용

  • WAS 의 주요 튜닝 포인트는 최대 쓰레드 수이다. ( 튜닝을 잘하는게 중요 !! )
  • 최대 쓰레드 수를 너무 낮게 설정하면 [ 리소스는 여유롭지만, 동시 요청의 수가 많아지면 클라이언트 응답이 지연됨 ]
  • 최대 쓰레드 수를 너무 높게 설정하면 [ 동시요청이 많아지면, 리소스의 임계점 초과로 서버가 다운됨 ]
  • 장애가 발생하면 [ 클라우드면 서버부터 늘리고, 튜닝 ] [ 클라우드가 아니면 그냥 튜닝 ]

 

 

쓰레드 풀 적정 숫자 찾는 방법

  • 애플리케이션 로직 복잡도, CPU, Memory, IO 리소스 상황에 따라 모두 다름
  • 성능 테스트 ( 툴 : 아파치 ab, 제이미터, nGrinder ) - 최대한 실제 서비스와 유사한 성능 테스트 시도

 

 

WAS 의 멀티 쓰레드 지원 ( WAS 의 필요성 !! )

  • 멀티 쓰레드에 대한 부분은 WAS 가 처리
  • 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 됨
  • 개발자는 싱글 쓰레드 프로그래밍을 하듯 편리하게 소스 코드 개발
  • 하지만 싱글톤 객체는 주의해서 사용 ( 서블릿, 스프링 빈 )

 

 

 

 

 

'스터디' 카테고리의 다른 글

MVC 패턴  (0) 2022.11.28
백엔드에서의 HTML, HTTP 간단한 요점  (0) 2022.11.24
서블릿  (1) 2022.11.22
빈 스코프  (0) 2022.08.11
스프링 컨테이너  (0) 2022.08.11

+ Recent posts