본문 바로가기
▶ Back-End/개념 요약

스레드 풀(Thread Pool) 이란?

by 오늘도 코딩 2022. 11. 22.
728x90
반응형

*자세한 설명 생략

 

 

▷ 스레드(Thread) 란?

프로세스 내에서 실제로 작업을 수행하는 주체

 

 

▷ 스레드 풀(Thread Pool) 이란?

병렬 처리가 잦은 프로그램에서 사용하기 적합

스레드를 미리 생성하고, 작업 요청이 발생할 때마다 미리 생성된 스레드로 해당 작업을 처리하는 방식

*이때, 작업이 끝난 스레드는 종료되지 않으며 다음 작업 요청이 들어올 때까지 대기

 

 

▷ 스레드 풀(Thread Pool) 주요 용어

용어 설명
초기 스레드 생성될 스레드
코어 스레드 남아있을 최소 스레드
최대 스레드 스레드의 최대 개수

 

 

▷ 스레드 풀(Thread Pool) 생성

종류 설명
CachedThreadPool - 초기 스레드 수, 코어 스레드 수가 0개, 최대 스레드 수(Integer.MAX_VALUE)
- 작업이 들어올 때 마다 스레드를 생성, 생성된 스레드가 60초 동안 유휴상태면 스레드를 제거
FixedThreadPool - 초기 스레드 수가 0개, 코어 스레드 수와 최대 스레드 수는 스레드 풀이 생성될 때 지정
- 존재하는 스레드의 개수보다 작업량이 많으면 스레드를 생성
- 생성된 스레드는 유휴상태가 오래되도 제거하지 않음
ThreadPoolExecutor - 스레드를 관리하고 직접 생성
- CachedThreadPool과 FixedThreadPool도 결국 ThreadPoolExecutor를 사용
- new ThreadPoolExecutor( 코어 스레드 개수, 최대 스레드 개수, 유휴시간, 유휴시간 단위, 작업큐);

 

 

▷ 스레드(Thread) 작업 처리 요청

종류 설명
execute() - 작업 처리 결과를 반환하지 않음
- 작업 처리 도중 예외가 발생하면 스레드가 종료되고 해당 스레드는 스레드 풀에서 제거 
- 다른 작업을 처리하기 위해 새로운 스레드를 생성
submit() - 작업 처리 결과를 반환
- 작업 처리 도중 예외가 발생하더라도 스레드는 종료되지 않고 다음 작업을 위해 재사용
- 스레드의 생성 오버헤드를 방지하기 위해서라도 submit() 을 가급적 사용

 

 

▷ 스레드 풀(Thread Pool) 종료

종류 설명
shutdown() - 현재 스레드가 처리중인 작업과 작업 큐에 대기하고 있는 작업을 모두 끝 마친 뒤 스레드 풀을 종료
shutdownNow() - 현재 작업중인 스레드를 강제로 작업 중지
- 작업 큐 대기열에 남아있는 작업을 List<Runnable> 로 반환
awaitTermination() - shutdown() 을 먼저 호출
- 전달된 timeout 시간 내로 모든 작업이 완료되면 true,
  완료하지 못하면 처리중인 스레드를 강제 종료 후 false 반환

 

 

728x90
728x90

'▶ Back-End > 개념 요약' 카테고리의 다른 글

Sinks.many() 란?  (0) 2022.11.29
Spring WebFlux Non-Blocking 방법  (0) 2022.11.29
R2DBC 란?  (0) 2022.11.11
Gradle vs Maven  (0) 2022.11.09
Spring WebFlux 란?  (0) 2022.11.08

댓글