0

В документации memoryawarethreadpoolexecutorНетти Выполнение резьбы - MemoryAwareThreadPoolExecutor

http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/execution/MemoryAwareThreadPoolExecutor.html

порядок выполнения Под Event он упоминает, что

Тема X: --- Channel A (Event 2) --- Channel 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 Worker Threads. События передаются в другой пул потоков, и нет гарантии того, когда задача будет выполнена, даже для того же канала. Канал A может передать Событие 1, которому назначается Thread X, который выгружен, а затем Канал A передает Событие 2, которое немедленно выполняется Thread Y, после чего Thread X снова запускается и выполняет Событие 1.

, Я согласен с тем, что временная шкала для Thread X на графике является странной, поскольку она, естественно, будет выбирать задачи из внутренней очереди по порядку. Но, и я предполагаю, никакая гарантия не может быть сделана о заказе задач, поставленных в очередь в ThreadPoolExecutor. Очереди обычно являются FIFO, но они не обязательно должны быть.

0

Точно. Такая же «нить на канал» может не соответствовать больше, как только будет использован ExecutorHandler.