Java Netty通道处理程序、线程和堆栈

Java Netty通道处理程序、线程和堆栈,java,networking,netty,Java,Networking,Netty,Netty的通道处理程序实例(如SimpleChannelInboundHandler、ChannelInboundHandlerAdapter等)是否共享相同的线程和堆栈,或者每个实例都有自己的线程和堆栈?我这样问是因为我实例化了许多通道处理程序,需要它们相互通信,我必须决定使用线程通信还是非线程通信 谢谢你的回答。答案:视情况而定 我假设您一定在构建一个服务器,我所说的一些可能不适用 根据,决定通道处理程序在哪个线程上运行的因素之一是如何将其添加到管道中。Netty允许将处理程序的单个实例用

Netty的通道处理程序实例(如SimpleChannelInboundHandler、ChannelInboundHandlerAdapter等)是否共享相同的线程和堆栈,或者每个实例都有自己的线程和堆栈?我这样问是因为我实例化了许多通道处理程序,需要它们相互通信,我必须决定使用线程通信还是非线程通信

谢谢你的回答。答案:视情况而定

我假设您一定在构建一个服务器,我所说的一些可能不适用

根据,决定通道处理程序在哪个线程上运行的因素之一是如何将其添加到管道中。Netty允许将处理程序的单个实例用于所有管道(即到服务器的连接),在这种情况下,您必须适应不同的线程

相反,如果使用通道初始值设定项将处理程序添加到管道中,则不需要在线程之间通信,因为每个连接使用不同的处理程序实例

这还假定您正在使用多个工作线程来运行通道处理程序。您还必须说明处理程序与哪个通道通信,如果您没有使用通道初始化处理程序存储状态变量,那么您必须适应线程间通信

您最好的选择是在做出决定之前调试每个处理程序中的当前线程,netty的线程行为及其与程序的交互方式在很大程度上取决于您的实现和数据移动的位置。

答案:这取决于

我假设您一定在构建一个服务器,我所说的一些可能不适用

根据,决定通道处理程序在哪个线程上运行的因素之一是如何将其添加到管道中。Netty允许将处理程序的单个实例用于所有管道(即到服务器的连接),在这种情况下,您必须适应不同的线程

相反,如果使用通道初始值设定项将处理程序添加到管道中,则不需要在线程之间通信,因为每个连接使用不同的处理程序实例

这还假定您正在使用多个工作线程来运行通道处理程序。您还必须说明处理程序与哪个通道通信,如果您没有使用通道初始化处理程序存储状态变量,那么您必须适应线程间通信


您最好的选择是在做出决定之前调试每个处理程序中的当前线程,netty的线程行为及其与程序的交互方式对您的实现和数据的移动位置具有高度的主观性。

一般来说,如果处理程序具有状态,则每个通道(管道)只有一个处理程序。否则,请使用@ChannelHandler.Sharable注释处理程序,并对每个通道使用相同的实例

一般来说,如果处理程序有状态,则每个通道(管道)有一个处理程序。否则,请使用@ChannelHandler.Sharable注释处理程序,并对每个通道使用相同的实例