0

我想了解 netty 工作线程是如何工作的。根据代码,对于每个新请求,我们都会获得 nextwoker() 任何一个工作线程并将其分配给处理客户端事件。所以根据我的理解,单个线程将能够处理来自不同客户端的不同请求。

我在这里有一个问题,对于客户端(通道/套接字),进入该特定通道的所有事件都是由同一个线程处理还是不同线程可以处理它们。我的假设是单线程处理所有事件(不包括未来事件)。但根据 MemoryAwareThreadPoolExecutor 的文档,他们告诉通道,不同的线程处理不同的事件。

为了验证这一点,我使用单个客户端和工作线程 ppol 编写了一个小程序,它有 50 个工作线程,但是当我在消息接收事件中保持睡眠时,我的客户端等待下一个消息接收调用。这确认为每个客户端分配了单个线程。请说清楚 ...

4

3 回答 3

2

同一个 Worker 线程将一直用于 Channel。所以可以安全地假设情况就是这样。

如果您使用 OrderedMemoryAwareThreadPoolExecutor,则可能不再如此。

于 2012-05-16T07:23:03.693 回答
0

我认为只有假设同一个线程不会用于同一个客户端是安全的。

于 2012-07-23T06:07:56.547 回答
0

据我了解,Netty 使用工作线程来处理传入连接。

您不应该阻塞(休眠)这些工作线程,否则您的客户端将等待响应,并且您还将浪费一个本可以用于处理另一个请求的线程。

您应该做的是使用 OrderedMemoryAwareThreadPoolExecutore 将您的工作分派到另一个线程池;或者您可以使用自己的 Executor 在messageReceived().

于 2012-05-16T00:54:42.703 回答