[Spring Batch] pool-size와 throttle-limit의 관계

# 개요

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에서 스레드 풀을 사용하여 작업을 병렬 처리하는 데 중요한 역할을 한다. 두 설정의 차이점과 관계를 이해하고, 적절한 값을 설정함으로써, 작업 처리 성능을 최적화할 수 있다.


[Spring Batch] pool-size와 throttle-limit의 관계
Tagged on:

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.