MemoryAwareThreadPoolExecutor가 Thread 개수를 일정하게 유지할 필요가?

208 views
Skip to first unread message

Jung, Kangsik

unread,
Aug 12, 2011, 2:56:43 AM8/12/11
to nett...@googlegroups.com
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.

이희승 (Trustin Lee)

unread,
Aug 26, 2011, 12:33:12 AM8/26/11
to nett...@googlegroups.com
안녕하세요,

원래 의도는 필요한 수 만큼의 스레드만 떠 있고 할 일이 없는 스레드는 30초 후 자동으로 종료하도록 하는 것인데요, 무조건 최대 수 만큼의 스레드가 유지된다면 제가 기대한 것과는 다른 결과네요.

MemoryAwareThreadPoolExecutor 와 OrderedMemoryAwareThreadPoolExecutor 소스가 모두 공개되어 있으므로 MATPE 의 기능을 없애고 OMATPE 의 이벤트 순서 제어 기능만 뽑아서 구현하는 것이 가능합니다.

아니면 타임아웃 시간을 아주 길게 두는 방법도 있겠습니다.

Reply all
Reply to author
Forward
0 new messages