Netty의 (Ordered)MemoryAwareThreadPoolExecutor는 생성자에서 받은 corePoolSize를
ThreadPoolExecutor의 corePoolSize, maximumCorePoolSize에 동일하게 전달합니다.
결론적으로 언제나 일정한 수의 thread가 유지되는데요. 가장 간단한 생성자의 경우 keepAliveTime이 30초로 지정되기 때문에
corePoolSize가 조금만 큰 경우 수없이 많은 스레드가 생성되었다 사라지게 됩니다.(언제나 corePoolSize 만큼 스레드를
유지하는데, keepAliveTime 30초여서 아무것도 안하고 있는 스레드를 30초 후 중지하고 새로운 스레드를 생성하더군요)
이게 특별한 이유가 있는 구현인건가요? executionHandler가 block되는 작업을 처리해야 하기에 executor의 최대
스레드 값을 좀 크게 잡아놓고 있는데, 언제나 최대값만큼 떠 있고 아무의미없이 생겼다 사라지는 스레드를 보고 있자니 좀 이상하네요.
MemoryAware에 해당하는 기능보단 Ordered 처리 때문에 사용하고 있는데요. 순차적인 ChannelEvent 실행을 보장하면서
수백개의 idle 스레드가 의미없이 생겨났다 사라지는 일은 없게ㅔ 할 방법 없을까요?
--
View this message in context: http://netty-forums-and-mailing-lists.685743.n2.nabble.com/MemoryAwareThreadPoolExecutor-Thread-tp6679399p6679399.html
Sent from the Netty Korean User Group mailing list archive at Nabble.com.