0

在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) --->

Channel A(Event 1,Event 2),Channel A(Event 3)如何由两个线程X,Y处理。

根据我的理解,单个 netty 工作线程可以为许多客户端进行处理,但是对于客户端,它的所有事件(1 ,2 3)必须由同一个工作线程处理,对吗?怎么可能改变。

4

2 回答 2

1

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

但是,我同意图中线程 X 的时间线很奇怪,因为它自然会按顺序从内部队列中挑选任务。但是,我推测,不能保证 ThreadPoolExecutor 中排队的任务的顺序。队列通常是先进先出的,但它们并非必须如此。

于 2012-05-15T21:46:08.603 回答
0

完全正确..一旦使用 ExecutorHandler,相同的“每个通道线程”可能不再适用。

于 2012-05-16T07:24:26.220 回答