Netty线程执行 - MemoryAwareThreadPoolExecutor

时间:2012-05-15 18:02:45

标签: multithreading asynchronous event-handling threadpool 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)必须由相同的工作线程处理吗?怎么会改变。

2 个答案:

答案 0 :(得分:1)

请注意,在这种情况下,Netty Worker Threads池不再处理事件。事件被移交给另一个线程池,并且无法保证何时执行任务,即使对于同一个通道也是如此。通道A可以移交分配给线程X的事件1,该事件被抢占,然后通道A移交事件2,该事件由线程Y立即执行,之后线程X再次启动并执行事件1.

但是,我同意图中线程X的时间轴很奇怪,因为它会自然地按顺序从内部队列中选择任务。但是,我推测,不能保证在ThreadPoolExecutor中排队的任务的顺序。队列通常是FIFO,但它们不一定是。

答案 1 :(得分:0)

确实..只要使用ExecutorHandler,相同的“每个频道的线程”就不再正确。