멀티 스레드

zhzkzhffk·2022년 5월 25일
0

본 포스팅은 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 보고 정리한 내용입니다.


HTTP 요청이 들어올 때 서블릿 객체를 누가 호출할까?

A) 스레드

스레드

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

요청 마다 스레드 생성

  • 장점
    - 동시 요청을 처리할 수 있다.

  • 단점
    - 스레드는 생성 비용이 매우 비싸다.
    - 고객이 요청이 올 때 마다 스레드 생성하면, 응답 속도가 늦어진다.
    - context switch 비용이 발생
    - 스레드 생성에 제한이 없다.
    - 너무 많은 생성은 임계점을 넘으면 WAS가 죽음

스레드 풀
요청 마다 스레드 생성의 단점 보완

특징

  • 필요한 스레드를 스레드 풀에 보관하고 관리
  • 스레드 풀에 생성 가능한 스레드 최대치를 관리. 톰캣은 default :최대 200개(변경 가능)

사용

  • 스레드가 필요하면, 생성되어 있는 스레드를 스레드 풀에서 꺼내서 사용
  • 사용 종료후에는 스레드 풀에 반납(스레드 종료가 아님!)
  • 최대 스레드가 모두 사용중이면 == 스레드 풀에 스레드가 없으면 → 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.

장점

  • 스레드가 미리 생성되어 있으므로, 스레드 생성 종료 비용이 절약, 응답 시간이 빠름
  • 생성 가능한 스레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청을 안전하게 처리할 수 있다.

스레드 풀의 적정 숫자는 성능 테스트를 통해 적정 숫자를 찾아야 한다. - 성능 테스트 툴: nGrinder, 아파치 ab, 제이미터
일단 클라우드 서버로 증설하고, 이후의 적정 숫자를 찾는다.

😍WAS가 멀티 스레드 처리해줌😍, 다만 싱글톤 객체이므로 공유 자원 쓸때만 조심해야한다.

profile
Backend Developer

0개의 댓글