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工作線程池處理。事件被移交給另一個線程池,即使對於同一個通道,也不能保證何時執行任務。通道A可以交出分配給被搶佔的線程X的事件1,然後通道A移交由線程Y立即執行的事件2,之後線程X再次踢入並執行事件1。

但是,我同意圖中線程X的時間線很奇怪,因爲它自然會按順序從內部隊列中選擇任務。但是,我推測,不能保證在ThreadPoolExecutor中排隊的任務的順序。隊列通常是FIFO,但它們不一定是。

0

確切地說..只要一個ExecutorHandler將被使用,相同的「每個通道的線程數」可能不再真實。