Thread와 Thread Pool

김윤서·2024년 9월 6일
0
post-thumbnail

Thread란?
프로그램에서 실행되는 작업의 최소 단위이다.
즉, Postman을 통해서 API 호출을 Spring에 요청하면 해당 요청을 thread가 처리를 해준다.

성능이 좋은 서버를 만들기 위한 thread의 활용으로는 하나의 thread를 극한의 효율로 사용하거나 thread를 여러 개 만들어서 활용한다.

  • 하나의 쓰레드를 극한의 효율로 사용하는 것이 Node.js Node는 싱글 쓰레드 기반으로 동작을 한다.

    node는 single-thread를 사용하여 한개의 Thread에서 모든 요청을 처리하는 방식을 취하고 있다.
    기존의 spring과 달리 요청이 들어오면 바로 결과를 주는 것이 아니라
    작업이 완료되는 대로 결과를 넘겨주는 비동기 방식을 취하고 있다.
    node가 가지고 있는 한개의 Thread는 작업이 진행되는 동안 멈춰있는 것이 아니라
    다른 작업을 수행할 수 있는 non-blocking 방식을 사용하고 있다.

  • 쓰레드를 여러개 만들어서 한번에 여러개의 요청을 처리하는 것이 Spring이다. Spring은 멀티 쓰레드 기반으로 동작한다.

    spring은 Multi-thread를 사용하여 다중요청을 동시에 처리하였다.
    한개의 Thread가 하나의 요청 담당하여 응답까지 책임지고 반환하고
    요청이 들어오면 바로 결과를 반환해주는 동기 방식을 사용하고
    연산이 완료되는 동안 기다리는 blocking 방식을 사용하고 있다.

Spring Boot에서 멀티 쓰레드를 관리하는 방법

  • 여기서 thread pool이란, 사용할 쓰레드를 미리 여러개 생성해서 저장해둔 개념이다.
  • 쓰레드를 미리 생성하는 이유는 쓰레드를 생성할 때는 시스템 자원을 할당해야 하고, 제거할 때는 자원을 해제해야 한다. 특히, 많은 쓰레드를 생성하고 제거하는 경우 성능 저하가 발생할 수 있기 때문이다.
  • thread pool의 동작 및 재활용 방법 : 쓰레드 풀은 일정 수의 쓰레드를 미리 생성하여 재사용한다.
    새로운 작업이 들어오면, 기존의 쓰레드를 재사용하여 작업을 처리하고, 작업이 끝나면 해당 쓰레드는 다시 풀로 반환된다.
    이렇게 하면 쓰레드를 반복적으로 생성하고 제거하는 비용을 줄일 수 있다.

내용정리

Postman으로 요청을 보내면

  1. 가장 먼저 서블릿 컨테이너에 들어온다.
  2. 쓰레드 풀에서 쓰레드가 할당된다.
  3. 할당된 쓰레드는 필터 체인에 등록된 필터를 순서대로 통과한다.
  4. 필터를 통과한 쓰레드는 DispatcherServlet을 호출하여 어떤 Servlet을 사용할지 결정한다.
  5. Spring 3 Layer 계층을 통과한다.

0개의 댓글