在Netty中,通过通道管道流动的事件按顺序发生,因为每个通道只被分配给一个线程,并且每个处理程序依次调用对方。这样做很有意义,可以减少许多同步问题。
然而,如果使用IdleStateHandler,根据我对源代码的理解,似乎channelIdle事件将在Timers线程的上下文中进行处理(例如,HashedWheelTime正在使用该线程)。
这是事实吗,还是我漏掉了什么?如果是这种情况,这是否意味着可能在同一时间在同一通道上执行空闲状态事件和IO事件(例如,messageReceived事件)?
此外,我可以保存ChannelHandler ctx,并在不同的线程中使用它来“写入”通道,从而在同一通道上同时在一个线程中向下游传递事件并在另一个线程中向上游传递事件吗?
最后,ChannelFutures在哪个线程中执行?
所有这些用例都是完全可以接受的,不是对Netty的批评,我实际上非常喜欢这个库并随处使用。只是随着我尝试用它做更复杂的事情,我想更多地了解其内部工作原理,以便确保我正在使用适当的并且恰到好处的同步(锁定)。
然而,如果使用IdleStateHandler,根据我对源代码的理解,似乎channelIdle事件将在Timers线程的上下文中进行处理(例如,HashedWheelTime正在使用该线程)。
这是事实吗,还是我漏掉了什么?如果是这种情况,这是否意味着可能在同一时间在同一通道上执行空闲状态事件和IO事件(例如,messageReceived事件)?
此外,我可以保存ChannelHandler ctx,并在不同的线程中使用它来“写入”通道,从而在同一通道上同时在一个线程中向下游传递事件并在另一个线程中向上游传递事件吗?
最后,ChannelFutures在哪个线程中执行?
所有这些用例都是完全可以接受的,不是对Netty的批评,我实际上非常喜欢这个库并随处使用。只是随着我尝试用它做更复杂的事情,我想更多地了解其内部工作原理,以便确保我正在使用适当的并且恰到好处的同步(锁定)。