Java에서 스레드 풀 크기를 계산하는 방법

2716 단어 javaconcurrency
"실행자 풀에서 사용할 스레드 수: 22, 50 또는 10?"- 스레드 풀이 생성될 때 비슷한 질문이 여러 번 있었고 풀에서 여러 스레드를 선택해야 합니다. 너무 많은 수의 스레드를 선택하면 리소스, CPU, 메모리가 고갈될 수 있습니다. 너무 적은 수의 스레드를 선택하면 CPU/메모리가 충분히 사용되지 않아 시스템 처리량이 저하됩니다.

스레드 풀에 대한 적절한 스레드 수를 선택하려면 스레드 풀이 작업할 작업 유형을 이해해야 합니다.
일반적으로 가능한 모든 작업은 두 그룹으로 나눌 수 있습니다.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 )의 비율

다음 예를 계산해 봅시다.
  • 시스템에 4개의 CPU 코어가 있으므로 N = 4;
  • 100% CPU 사용률을 목표로 하므로 U = 1;
  • 요청 대기 시간을 대략 100ms(W)로 추정할 수 있으며 실제 계산 시간은 약 20ms(C)입니다.

  • 그러면 스레드 수가 204 * 1 * 100/20 = 20로.

    결론



    이 기사에서는 일반적으로 최적의 스레드 풀 크기를 계산하는 방법에 대해 설명합니다. 스레드 풀 크기는 수식으로 계산된 크기보다 훨씬 커야 합니다. 다른 응용 프로그램이 동일한 시스템에서 작동하는지, 응용 프로그램이 소비하는 CPU 시간과 같은 많은 측면이 스레드 풀 크기에 영향을 미칩니다.

    수식은 CPU 사용률을 관찰하여 테스트 및 나중에 프로덕션 환경에서 확인해야 하는 스레드 풀의 추정 크기를 제공한다는 점을 강조하고 싶습니다.

    좋은 웹페이지 즐겨찾기