0

memoryawarethreadpoolexecutor의 문서에서의 Netty 스레드 실행 - MemoryAwareThreadPoolExecutor

http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/execution/MemoryAwareThreadPoolExecutor.html

그가 그

스레드 X 언급

에서 이벤트 실행 순서 : --- 채널 A (이벤트 2) --- 채널 A를 (이벤트 1) --------------------------->

스레드 Y : --- 채널 A (이벤트 3) - - 채널 B (이벤트 2) - 채널 B (이벤트 3) --->

스레드 Z : --- 채널 B (이벤트 1) --- 채널 B (이벤트 4) --- 채널 A (이벤트 4) --->

채널 A (이벤트 1, 이벤트 2), 채널 A (이벤트 3)는 두 개의 스레드 X, Y로 처리 할 수 ​​있습니다.

하나의 netty 작업자 스레드가 많은 클라이언트의 처리를 할 수 있지만 클라이언트의 모든 이벤트 (1, 2 3)는 동일한 작업자 스레드 권한으로 처리해야합니다. 그것은 어떻게 바뀔 수 있습니다.

답변

1

이 경우 이벤트는 더 이상 Netty Worker Thread 풀로 처리되지 않습니다. 이벤트는 다른 스레드 풀로 넘겨지며 동일한 채널에서도 작업이 언제 실행되는지 보장 할 수 없습니다. 채널 A는 선점 된 스레드 X에 할당 된 이벤트 1을 넘겨 줄 수 있고, 그 후 채널 A는 스레드 Y에 의해 즉시 실행되는 이벤트 2를 넘겨주고, 그 후에 스레드 X는 다시 킥을 내고 이벤트 1을 실행한다.

그러나 , 자연스럽게 내부 큐에서 순서대로 작업을 선택하기 때문에 그래프의 스레드 X에 대한 타임 라인이 이상하다는 것에 동의합니다. 그러나 ThreadPoolExecutor 내에 대기중인 작업의 순서에 대해서는 보장 할 수 없습니다. 대기열은 일반적으로 FIFO이지만 그럴 필요는 없습니다.

0

정확히 .. 같은 "채널 당 스레드"는 ExecutorHandler가 사용될 때 더 이상 true가 아닐 수도 있습니다.