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将被使用,相同的“每个通道的线程数”可能不再真实。