기술나눔

스레드 풀 이해 및 7개 매개변수

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

이해를 정의하다

스레드 풀은 실제로 풀링 기술을 구현한 것입니다. 풀링 기술의 핵심 아이디어는 리소스의 재사용을 실현하고 리소스의 반복적인 생성과 소멸로 인한 성능 오버헤드를 방지하는 것입니다. 스레드 풀은 작업 완료 후 스레드가 삭제되지 않고 다른 스레드에 의해 제출된 작업을 계속 처리하도록 여러 스레드를 관리할 수 있습니다.

스레드 풀 사용의 이점

  • 자원 소비를 줄입니다. 생성된 스레드를 재사용하여 스레드 생성 및 소멸 비용을 줄입니다.
  • 응답 속도를 향상시킵니다. 작업이 도착하면 스레드가 생성될 때까지 기다리지 않고 즉시 작업을 실행할 수 있습니다.
  • 스레드 관리성을 향상시킵니다. 스레드는 희소한 자원이므로 제한 없이 생성되면 시스템 리소스를 소모할 뿐만 아니라 시스템의 안정성도 저하됩니다. 스레드 풀은 통합 할당, 튜닝 및 모니터링에 사용될 수 있습니다.

건설 매개변수

여기에 이미지 설명을 삽입하세요.

  • corePoolSize: 스레드 풀 작업에 사용됩니다.코어 스레드 수
  • 최대 풀 크기 :최대 스레드 수 , 스레드 풀에서 생성할 수 있는 최대 스레드 수입니다. 스레드 풀의 스레드 수가 corePoolSize에 도달하면 작업 큐가 가득 차고 새 작업을 처리해야 하는 경우 스레드 풀은 이러한 작업을 처리하기 위해 새 스레드를 생성합니다(그러나 총 개수는 maximumPoolSize를 초과하지 않습니다). (이는 대기열 영역이 가득 차면 후속 스레드가 대기열로 직접 이동할 수 있는 것과 동일합니다.) 작업 수가 maximumPoolSize를 초과하고 작업 대기열이 가득 찬 경우 스레드 풀은 거부 정책에 따라 실행 불가능한 작업을 처리합니다.
  • keepAliveTime: corePoolSize 또는 모든 스레드를 초과한 후 생성된 스레드의 생존 시간최대 생존 시간, 구성에 따라 다릅니다.
  • 단위:keepAliveTime시간 단위
  • 작업대기열:작업 대기열 는 차단 대기열입니다. 스레드 수가 코어 스레드 수에 도달하면 작업이 차단 대기열에 저장됩니다. 일반적인 구현: ArrayBlockingQueue, LinkedBlockingQueue 등과 같은 BlockingQueue 인터페이스의 구현 클래스입니다.
  • threadFactory: 스레드 풀 내부에 스레드를 생성하는 데 사용됩니다.공장
  • 매니저:거부 정책;큐가 가득 차고 스레드 수가 최대 스레드 수에 도달하면 이 메서드가 호출되어 작업을 처리합니다.

매개변수 설정 방법

1. 코어 스레드 수(corePoolSize)를 결정합니다.

  • CPU 집약적 작업: CPU 집약적 작업의 경우 코어 스레드 수를 CPU 코어 수의 1~2배로 설정하는 것이 일반적입니다. 이렇게 하면 과도한 컨텍스트 전환을 방지하면서 CPU 리소스를 최대한 활용할 수 있습니다.
  • IO 집약적 작업: IO 집약적 작업의 경우 IO 작업을 대기할 때 스레드가 CPU를 점유하지 않으므로 더 많은 코어 스레드를 설정할 수 있습니다. 일반적으로 코어 스레드 수를 CPU 코어 수의 2배 이상으로 설정하면 IO를 기다리는 동안 더 많은 작업을 처리할 수 있습니다.
  • 혼합 작업: 애플리케이션에 CPU 집약적인 작업과 IO 집약적인 작업이 모두 포함되어 있는 경우 특정 상황에 따라 코어 스레드 수에 대한 설정의 균형을 맞춰야 합니다.

2. 최대 스레드 수 결정(maximumPoolSize)

  • 리소스가 제한된 환경: 리소스가 제한된 환경(예: 임베디드 시스템 또는 클라우드 서버)에서는 너무 많은 스레드가 리소스를 점유하지 않도록 최대 스레드 수를 제한해야 합니다.
  • 높은 동시성 시스템: 많은 수의 동시 요청을 처리해야 하는 시스템의 경우 최대 스레드 수를 적절하게 늘려 시스템의 동시 처리 기능을 향상시킬 수 있습니다. 단, 최대 스레드 수 설정은 시스템의 부하 용량과 리소스 상황을 고려하여 종합적으로 고려해야 합니다.

3. 스레드 유휴 시간 설정(keepAliveTime)

  • CPU 집약적 애플리케이션: CPU 집약적 애플리케이션의 경우 일반적으로 CPU 리소스가 매우 소중하고 너무 많은 유휴 스레드가 리소스를 점유하는 것을 원하지 않기 때문에 스레드 유휴 시간을 더 짧은 값으로 설정할 수 있습니다. 어떤 경우에는 0으로 설정되어 비핵심 스레드가 유지되지 않음을 나타낼 수도 있습니다.
  • IO 집약적 애플리케이션: IO 집약적 애플리케이션의 경우 스레드는 IO 작업을 기다릴 때 CPU 리소스를 점유하지 않으므로 스레드 유휴 시간을 더 긴 값(예: 1분 이상)으로 설정하여 잦은 스레드 시작 및 삭제를 방지할 수 있습니다. . 성능 오버헤드가 발생했습니다.

4. 작업 대기열(workQueue)을 선택합니다.

  • 제한된 대기열 : 제한된 대기열을 사용하면 대기열에 있는 작업의 대기 시간을 제한하고 너무 많은 작업으로 인한 메모리 오버플로를 방지할 수 있습니다. 그러나 대기열 길이를 너무 작게 설정하면 작업이 거부될 수 있습니다. (일반적으로 제한된 대기열을 선택합니다.
  • 무제한 큐: 무제한 큐를 사용하면 모든 작업을 최대한 많이 캐시할 수 있지만 메모리 소비 문제에 주의해야 합니다. 제한되지 않은 대기열을 사용하는 경우 스레드 풀이 대기열의 작업을 처리하기 위해 새 스레드를 생성하려고 시도하지 않기 때문에 스레드 풀의 최대 스레드 매개 변수 수가 유효하지 않게 될 수 있습니다.

5. 스레드 팩토리 구성(threadFactory)

스레드 팩토리는 새로운 스레드를 생성하는 데 사용됩니다. 스레드 팩토리를 사용자 정의하면 스레드 우선순위 및 데몬 스레드 상태와 같은 속성을 설정할 수 있으며 JVM에서 문제 진단을 용이하게 하기 위해 의미 있는 스레드 이름을 설정할 수도 있습니다.

6. 거부 정책 구성(핸들러)

스레드 풀이 새 작업을 처리할 수 없는 경우(즉, 스레드 수가 maximumPoolSize에 도달하고 작업 큐가 가득 찬 경우) 이러한 실행 불가능한 작업을 처리하도록 거부 정책을 구성해야 합니다.일반적인 거부 전략에는 다음이 포함됩니다.예외를 직접 던지기호출자의 스레드를 사용하여 작업 실행새 작업을 무시하고 대기열에서 가장 오래된 작업을 삭제합니다. 기다리다. 필요에 따라 거부 정책을 맞춤설정할 수도 있습니다.