ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의 쓰레드풀(ThreadPoolExecutor)의 원리
    IT 기술 및 용어/IT 면접 관련 지식 2024. 3. 7. 17:10

    자바 쓰레드(Thread) 사용


     

    1. 기본 개념

    • 멀티유저 지원:
      • 서버는 동시에 여러 사용자가 접속 가능한 구조.
      • 자바는 운영체제의 쓰레드를 활용하여 다중 접속을 지원.
    • 문제점:
      • 요청마다 새로운 쓰레드를 생성하면 운영체제 자원이 고갈될 위험.
      • 동시 접속 사용자가 많아지면 서버 다운 가능성 증가.
      •  

    2. Thread Per Request Model - API 요청 방식

    • 정의:
      • 요청(Request)마다 하나의 쓰레드를 생성하여 처리하는 방식.
      • Request와 Thread가 1:1 매칭.
    • 문제점:
      1. 쓰레드 생성 소요 시간 → 요청 처리 지연.
      2. 요청 증가 → 쓰레드 수 증가 → 과도한 Context Switching 발생.
      3. CPU 오버헤드 증가 및 CPU 시간 낭비.
      4. 메모리 고갈 및 서버 응답 불가 상태 초래.


    위와 같은 문제를 해결하기 위해 쓰레드 풀(ThreadPool)이라는 개념이 도입됨.

     

    쓰레드 풀(ThreadPool)


    1. 기본 개념

     

    • 관리 및 생성:
      • 미리 일정 개수의 쓰레드를 생성하여 관리하는 방법.
    • 장점:
      1. 쓰레드 생성/삭제 오버헤드 감소.
      2. 자원 효율성 및 성능 향상.
      3. 동시에 처리 가능한 작업 개수 제한 가능.
      4. 무제한 쓰레드 생성 방지.
    • 사용 사례:
      1. Thread Per Request Model.
      2. SubTask로 나뉘어 동시 처리 가능한 작업.
      3. 순서에 상관없이 동시 실행 가능한 작업.

    2. 쓰레드 풀(ThreadPool) 활용 팁

    (1) 적정 Thread 개수

    • CPU-Bound Task:
      • CPU 코어 개수만큼 또는 약간 초과.
    • I/O-Bound Task:
      • CPU 코어 개수의 1.5~3배.
      • 경험적으로 최적화 필요.

    (2) Task 개수 제한

    • 큐 크기 제한 확인:
      • 무제한 큐 → 메모리 고갈 위험.
    • 해결 방안:
      1. 큐 크기 제한.
      2. 제한 초과 요청은 처리 제외.

    (3) ThreadPoolExecutor

    • 자바에서 ThreadPool 제공을 위한 주요 클래스임.

    ThreadPoolExecutor 주요 개념

    • 초기 스레드 수:
      • ExecutorService 생성 시 기본 생성되는 스레드 수.
    • 코어 스레드 수:
      • 사용되지 않은 스레드를 제거할 때 최소 유지 개수.
    • 최대 스레드 수:
      • 쓰레드 풀에서 관리 가능한 최대 스레드 수.

     

      - 쓰레드 풀 생성 (ThreadPool Create)

    메소드명(매개 변수)
    초기 스레드 수
    코어 스레드 수
    최대 스레드 수
    newCachedThreadPool()
    0
    0
    Intger.MAX_VALUE
    newFixedThreadPool(int nThreads)
    0
    nThreads
    nThreads

     

     

      - 쓰레드 풀 종료 (ThreadPool Shutdown)

    리턴 타입
    메소드명
    설명
    void
    shutdown()
    현재 작업과 큐 대기 작업 완료 후 종료
    List<Runnable>
    shutdownNow()
    현재 작업 중단 후 큐에 남은 작업 목록 반환
    boolean
    awaitTermination()
    지정 시간 내 작업 완료 시 true, 아니면 작업 중단 후 false 반환

     

      - 쓰레드 풀 작업 (ThreadPool Execute)

    메소드명
    설명
    execute()
    쓰레드 풀에서 작업 실행

     

     

    ThreadPool의 동작을 GIF로 표현한 그림

Designed by Tistory.