4 개의 CPU가있는 시스템에서 스레드 풀이 실행 중이며이 풀에 동적로드 제어를 원합니다. 풀에서 실행중인 일부 스레드가있을 때 corePoolSize를 변경할 수 있습니까? 즉,로드가 낮을 때 최대 2 개의 스레드가 동시에 실행될 수 있지만로드가 높으면 4 개의 스레드가 허용됩니다. 그렇지 않다면 적절한 해결책이 있습니까?ThreadPoolExecutor의 corePoolSize를 동적으로 변경하십시오.
0
A
답변
1
풀에서 실행중인 일부 스레드가있을 때 corePoolSize를 변경할 수 있습니까?
확실히. corePoolSize
은 volatile
으로 ThreadPoolExecutor
으로 표시되므로 언제든지 기기로드에 따라 tpe.setCorePoolSize(...)
번으로 전화 할 수 있습니다. 수영장에서 일자리를 창출하고 수면 상태를 확인하고 코어 풀 크기를 조정할 수도 있습니다. 물론 코어 크기에 다른 스레드를 추가하는 것이 좋습니다.
로드가 낮을 때 최대 2 개의 스레드가 동시에 실행될 수 있지만로드가 높으면 4 개의 스레드가 허용됩니다.
스레드 풀로 보내는 작업이 완전히 CPU 바운드 인 경우 이것이 실제로 적용되는 유일한 시간이라는 점에 유의해야하지만 괜찮습니다. 모든 입출력 (디스크, 네트워크 등)은 동시성을 줄이는 것이 타당하지 않음을 의미합니다.
이 말은 결코 스레드 응용 프로그램을 많이 작성했지만 필자는이 일을해야한다고 생각하지 못했습니다.
"가장 일반적으로 코어 및 최대 풀 크기는 구성시에만 설정되지만 setCorePoolSize (int) 및 setMaximumPoolSize (int)를 사용하여 동적으로 변경할 수도 있습니다." https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html – Fildor
고/저 부하를 어떻게 감지 할 계획입니까? – Fildor
Re, "그렇지 않다면 적절한 해결책이 있습니까?" 최악의 경우라면 아무 것도 자신의 스레드 풀을 구현할 수 없습니다. –