ThreadPool
을 이용해서 Task를 실행하고 관리해줍니다.Spring 기본설정
으로 되어 있는 TaskExecutor
는 SimpleAsyncTaskExecutor
입니다.SimpleAsyncTaskExecutor
에서는 어떤 스레드도 재사용하지않고
호출마다 새로운 스레드를 시작합니다.
이런 방식은 리소스 낭비
가 심하니 아래와 같은 Thread Pool을 재정의해서 사용하는 방식이 바람직합니다.고정된 갯수를 가진 쓰레드풀
입니다.Thread 갯수의 제한없이 무한정 생성
하고, 해당 쓰레드의 작업이 60초간 없을 경우 Pool에서 제거하는 방식
입니다.1분에 한 번씩 임무를 수행
시키기 위한 쓰레드풀입니다.Fork
)하고, 분할된 Task가 처리되면 그것을 합쳐(Join
) 리턴해줍니다. 마치 분할정복 알고리즘처럼 동작합니다.잡을 훔쳐다가
일을 합니다.모든 쓰레드가 골고루 가져가서 일하게 됩니다.
하나의 쓰레드가 굉장히 오래 걸리고 나머지 쓰레드들의 작업은 빨리 끝나는 경우
에 빛을 발하게 됩니다.쓰레드에게 분할되는 Job이 거의 동일한 일을 하게 된다면
ForkJoinPool은 오히려 독이 될 수 있습니다. 쓸데없는 객체 생성을 하게 되기 때문입니다.