Java에서 스레드 풀 크기를 계산하는 방법
2716 단어 javaconcurrency
스레드 풀에 대한 적절한 스레드 수를 선택하려면 스레드 풀이 작업할 작업 유형을 이해해야 합니다.
일반적으로 가능한 모든 작업은 두 그룹으로 나눌 수 있습니다.
compute-intensive tasks
또는 CPU Bound tasks
, I/O tasks
또는 I/O Bound tasks
.컴퓨팅 집약적인 작업(CPU 바운드)
일반적으로 컴퓨팅 집약적인 작업은 CPU에 지속적으로 작업이 로드되고 사용 시간에 비해 CPU 유휴 시간이 훨씬 짧은 작업입니다.
CPU | C | W | C | W | C | W | C...
|-----------|---|-----------|---|-----------|---|-------->
Time
여기서
C
- CPU의 계산 시간, W
- 작업을 기다리는 CPU 유휴 시간입니다.컴퓨팅 집약적인 작업의 경우 시스템은 일반적으로 아래 공식으로 계산된 스레드 풀 크기로 최적의 활용도를 달성합니다.
Threads count = N + 1
여기서
N
- Java에서 얻을 수 있는 머신의 CPU 코어 수Runtime.getRuntime().availableProcessors()
따라서 시스템에 4개의 CPU 코어가 있는 경우 최적의 최대 스레드 수는 5개여야 합니다.
I/O 작업(I/O 바운드)
I/O 작업은 네트워크 호출을 통해 다른 시스템의 다른 응용 프로그램과 많은 통신을 포함하는 작업입니다. 예를 들어 스레드가 원격 시스템에 대한 Http 요청을 실행하거나 데이터베이스에서 데이터를 가져오는 경우입니다. I/O 작업은 처리 시간이 짧고 유휴 시간이 긴 것이 특징입니다. CPU는 작업 부하가 적고 스레드는 다른 시스템에서 데이터를 얻을 때까지 기다립니다.
CPU | C | W | C | W | C | W | C...
|---|-------|---|---|------|---|-------->
Time
여기서
C
- CPU의 계산 시간, W
- 작업을 기다리는 CPU 유휴 시간입니다.I/O tasks
의 경우Threads count = N * U * (1 + W/C)
어디
N
- Runtime.getRuntime().availableProcessors()
를 사용하여 Java에서 얻을 수 있는 머신의 CPU 코어 수U
- 대상 CPU 사용률 및 0 <= U
<= 1W/C
- 계산 시간( W
)에 대한 대기 시간( C
)의 비율다음 예를 계산해 봅시다.
N
= 4; U
= 1; W
)로 추정할 수 있으며 실제 계산 시간은 약 20ms(C
)입니다. 그러면 스레드 수가
20
4 * 1 * 100/20 = 20
로.결론
이 기사에서는 일반적으로 최적의 스레드 풀 크기를 계산하는 방법에 대해 설명합니다. 스레드 풀 크기는 수식으로 계산된 크기보다 훨씬 커야 합니다. 다른 응용 프로그램이 동일한 시스템에서 작동하는지, 응용 프로그램이 소비하는 CPU 시간과 같은 많은 측면이 스레드 풀 크기에 영향을 미칩니다.
수식은 CPU 사용률을 관찰하여 테스트 및 나중에 프로덕션 환경에서 확인해야 하는 스레드 풀의 추정 크기를 제공한다는 점을 강조하고 싶습니다.
Reference
이 문제에 관하여(Java에서 스레드 풀 크기를 계산하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alex538/how-to-calculate-thread-pool-size-in-java-1jf4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)