在netty中,流经通道流水线的事件按顺序发生,因为每个通道只能有效地分配给一个线程,并且每个处理器依次相互调用。这是有道理的,并缓解许多同步问题。了解Netty对线程的使用
但是,如果您使用IdleStateHandler,那么在读取源代码时,看起来channelIdle事件将在定时器线程(例如HashedWheelTime所使用的线程)中“处理”。
是这种情况还是我错过了什么?如果是这样,这是否意味着idlestate事件和IO事件(例如messageRecieved事件)可能同时在同一个通道上执行?
另外,因为我可以保存ChannelHandler ctx并将其用于不同的线程以“写入”某个通道,因此在一个线程中下游事件并且同时在另一个线程中上行同一个频道?
最后哪个线程做ChannelFutures执行?
所有这些用例都是完全可以接受的,根本不是对Netty的批评,实际上我非常喜欢这个库,并在各处使用它。它只是当我试图用它做更多更复杂的事情时,我想更多地了解它如何在引擎盖下工作,这样我就可以确保我使用正确和恰当的量(不多也不少)同步(锁定)。
感谢您的答案,正是我需要知道的。 – user1129382 2012-01-04 22:38:25