# 개요
Spring Batch에서 pool-size와 throttle-limit는 스레드 풀에서 동시에 실행될 수 있는 작업의 최대 개수를 제어하는 데 사용된다. 하지만, 작동 방식과 영향 범위에 있어 몇 가지 중요한 차이점이 있다.
# pool-size
task:executor 태그에서 설정되며, 스레드 풀에 생성될 최대 스레드 수를 결정한다. 모든 스레드가 항상 작업을 수행하는 것은 아니며, 일부 스레드는 대기 상태에 있을 수 있다.
기본값은 10 이다.
<task:executor id="executor" pool-size="8" />
# throttle-limit
batch:step 태그 내 tasklet 태그에서 설정되며, 실제로 실행될 작업의 최대 개수를 결정한다. pool-size보다 작거나 같아야 한다. throttle-limit가 pool-size보다 작으면, 일부 스레드가 항상 대기 상태에 있게 된다.
기본값은 4 이다.
<batch:step id="stepRuleExcute" >
<batch:tasklet transaction-manager="transactionManager" throttle-limit="2" task-executor="executor" >
<batch:chunk reader="inputFileReader" processor="myProcess" writer="outputFileWriter" commit-interval="1000">
# 관계
pool-size는 스레드 풀의 용량을 결정하고, throttle-limit는 실제로 실행될 작업의 수를 제한한다.
throttle-limit는 pool-size보다 작거나 같아야 정상적으로 작동된다.
일반적으로 corePoolSize, maximumPoolSize, throttle-limit 를 동일한 값으로 설정하는 것을 추천한다.
# 예시
pool-size가 8이고 throttle-limit가 2인 경우, 최대 8개의 스레드가 생성되지만, 실제로 실행될 작업은 최대 2개 뿐이다.
pool-size가 8이고 throttle-limit가 8인 경우, 최대 8개의 스레드가 생성되고, 모든 스레드가 작업을 수행할 수 있다.
# 고려 사항
throttle-limit는 DB 커넥션 풀 크기를 고려해야 한다. throttle-limit가 커넥션 풀 크기보다 크면 병목 현상이 발생할 수 있다.
작업 처리 속도와 병렬 처리 성능을 고려하여 적절한 pool-size와 throttle-limit 값을 설정해야 한다.
# 결론
pool-size와 throttle-limit는 Spring Batch에서 스레드 풀을 사용하여 작업을 병렬 처리하는 데 중요한 역할을 한다. 두 설정의 차이점과 관계를 이해하고, 적절한 값을 설정함으로써, 작업 처리 성능을 최적화할 수 있다.