在netty中,流經通道流水線的事件按順序發生,因爲每個通道只能有效地分配給一個線程,並且每個處理器依次相互調用。這是有道理的,並緩解許多同步問題。瞭解Netty對線程的使用
但是,如果您使用IdleStateHandler,那麼在讀取源代碼時,看起來channelIdle事件將在定時器線程(例如HashedWheelTime所使用的線程)中「處理」。
是這種情況還是我錯過了什麼?如果是這樣,這是否意味着idlestate事件和IO事件(例如messageRecieved事件)可能同時在同一個通道上執行?
另外,因爲我可以保存ChannelHandler ctx並將其用於不同的線程以「寫入」某個通道,因此在一個線程中下游事件並且同時在另一個線程中上行同一個頻道?
最後哪個線程做ChannelFutures執行?
所有這些用例都是完全可以接受的,根本不是對Netty的批評,實際上我非常喜歡這個庫,並在各處使用它。它只是當我試圖用它做更多更復雜的事情時,我想更多地瞭解它如何在引擎蓋下工作,這樣我就可以確保我使用正確和恰當的量(不多也不少)同步(鎖定)。
感謝您的答案,正是我需要知道的。 – user1129382 2012-01-04 22:38:25