동시요청 멀티 쓰레드

hanahana·2023년 3월 16일
0

spring 스터디

목록 보기
3/5

쓰레드

  • 서블릿 객체를 호출한다.
  • 어플리케이션 코드를 순차적으로 실행하는것
  • 쓰레드가 없다면 자바 어플리켘이션이 실행이 불가능하다
  • 쓰레드는 한번의 하나의 코드라인만 수행한다
  • 동시처리가 필요하면 쓸드를 추가로 생성한다.

단일요청 - 하나의 쓰레드 사용

  • 한개의 요청을 처리하고 쓰레드는 종료한다

다중요청

  • 요청을 하는 도중 처리가 지연됐을때 두번째 요청이 들어올경우
    • 이 경우 요청 두개가 모두 수행할수 없게된다.

요청마다 쓰레드 생성

  • 이런 문제를 해결하기위해 오쳥마다 쓰레드를 생성하여 요청을 처리한다.

장점

  • 동시 요청처리가능
  • 리소스가 혀옹될떄까지 처리가능
  • 지연되어도 다른 요청처리 가능하다

단점

  • 생성 비용이 비싸고 응답속도가 늦어진다
  • 컨텍스트 스위칭 비용이 발생하다.
  • 너무 많은 생성으로 cpu와 메모리가 임계점을 점어 서버가 죽을수있다.

쓰레드 풀

  • 쓰레드 풀안에 쓰레드를 미리 만들어두어 사용한다.
  • 사용이 끝난 쓰레드를 종료시키지 않고 쓰레드 풀에 대기 시켜 쓰레드의 생성을 하지 않는다.
  • 쓰레드풀보다 많은 요청이 들어왔을때 그 요청들을 대기 시키거나 요청을 거절할수있다.

장점

  • 쓰레드를 생성, 종료하는 비용이 절영되며 응답시간이 빠르다
  • 최대치가 정해져있기때문에 기존요청을 안전하게 처리가능하다.

실무팁

  • was의 주요 투닝 포인트는 최대 쓰레드의 수이다
    • 너무 낮게 설정하면 리소스는 여유가있지만 응답이 느려진다.
    • 너무 높게 설정하면 cpu 메모리 리소스의 임계정 초가로 서버가 다운된다.
  • 적정숫자는?
    • 어플리케이션 로직의 복잡도, cpu, 메모리 io리소스상황에 따라 모두 다르다

    • 성능테스트를 하여 적정숫자를 파악해야 한다

      • 최대한 실제 서브스와 유사하게 테스트헤야한다
      • 아파치, ab 제이미터, nGrinder

핵심

  • 멀티스레드는 was가 처리하여 멀티스레드 관련 코드를 신경쓰지 않아도 된다.
  • 멀티스레드환경이기때문에 싱글톤객체(서빌릿, 스프링빈)는 주의해서 사용해야 한다.
profile
hello world

0개의 댓글