개발/자바
Java에서 쓰레드 개수 설정: CPU 바운드 vs I/O 바운드 작업 최적화 방법
피터JK
2025. 3. 18. 16:20
728x90
Java에서 쓰레드 개수를 설정할 때, CPU 바운드 작업과 I/O 바운드 작업에 따라 적절한 쓰레드 개수를 설정하는 방식이 다다.
1. CPU 바운드 작업에서의 쓰레드 개수 설정
CPU를 많이 사용하는 연산 작업(예: 이미지 처리, 암호화, 머신러닝 등)을 수행하는 경우, 쓰레드 개수는 일반적으로 사용 가능한 CPU 코어 수와 동일하게 설정하는 것이 좋다.
권장 공식 (CPU 바운드 작업):
int threadPoolSize = Runtime.getRuntime().availableProcessors();
Runtime.getRuntime().availableProcessors()는 시스템에서 사용 가능한 CPU 코어 수를 반환한다.
예제: 고정 크기 스레드 풀 설정
int coreCount = Runtime.getRuntime().availableProcessors();
ExecutorService executor = Executors.newFixedThreadPool(coreCount);
CPU 바운드 작업에서는 너무 많은 쓰레드를 생성하면 컨텍스트 스위칭 비용이 증가할 수 있기 때문에, 보통 CPU 코어 수와 같은 개수의 쓰레드가 가장 효율적이다.
반응형
2. I/O 바운드 작업에서의 쓰레드 개수 설정
파일 입출력, 네트워크 통신, 데이터베이스 처리 등 I/O 작업에서는 CPU 사용률이 낮고, 쓰레드가 대기 상태에 있는 시간이 많습니다. 이 경우에는 쓰레드를 더 많이 사용하여 대기 시간 동안 다른 작업을 처리할 수 있기 때문에, 코어 수보다 많은 개수를 설정하는 것이 유리하다.
권장 공식 (I/O 바운드 작업):
int threadPoolSize = Runtime.getRuntime().availableProcessors() * 2;
예제: I/O 작업을 위한 캐시된 스레드 풀 설정
ExecutorService executor = Executors.newCachedThreadPool();
I/O 바운드 작업에서는 코어 수의 2배에서 4배 정도의 쓰레드 수가 적당합니다. 이는 I/O 작업 중 대기 시간이 많기 때문에 더 많은 쓰레드를 사용하여 성능을 최적화할 수 있기 때문이다.
3. 결론
- CPU 바운드 작업에서는 쓰레드 개수를 시스템의 CPU 코어 수와 동일하게 설정하는 것이 가장 효율적
- I/O 바운드 작업에서는 쓰레드 개수를 CPU 코어 수의 2배에서 4배 정도로 설정하는 것이 좋다.
- 하이브리드 작업에서는 적절한 비율로 쓰레드 개수를 조정하고, 실제 시스템에서 테스트 및 모니터링을 통해 최적화하는 것이 중요.
이와 같이, 쓰레드 개수를 설정할 때는 작업 유형을 고려하여 설정하고, 필요에 따라 테스트와 모니터링을 통해 성능을 최적화하는 것이 핵심이다.
728x90