在memoryawarethreadpoolexecutor
的文档中在事件执行顺序下,他提到了
线程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)必须由相同的工作线程处理吗?怎么会改变。
答案 0 :(得分:1)
请注意,在这种情况下,Netty Worker Threads池不再处理事件。事件被移交给另一个线程池,并且无法保证何时执行任务,即使对于同一个通道也是如此。通道A可以移交分配给线程X的事件1,该事件被抢占,然后通道A移交事件2,该事件由线程Y立即执行,之后线程X再次启动并执行事件1.
但是,我同意图中线程X的时间轴很奇怪,因为它会自然地按顺序从内部队列中选择任务。但是,我推测,不能保证在ThreadPoolExecutor中排队的任务的顺序。队列通常是FIFO,但它们不一定是。
答案 1 :(得分:0)
确实..只要使用ExecutorHandler,相同的“每个频道的线程”就不再正确。