В netty события, которые проходят через конвейер канала, происходят по порядку, поскольку каждый канал фактически назначается только одному потоку, а каждый обработчик вызывает друг друга по очереди.Это имеет смысл и устраняет многие проблемы с синхронизацией.
Однако, если вы используете IdleStateHandler, из моего чтения источника получается, что событие channelIdle будет «обработано» в контексте потока Timers (потоканапример, использует HashedWheelTime).
Это случай или я что-то пропустил?Если это так, значит ли это, что возможно, чтобы событие idlestate и событие IO (например, messageRectained) выполнялись на одном и том же канале одновременно?
Кроме того, как я могсохранить ChannelHandler ctx и использовать его в другом потоке, например, для «записи» в канал, таким образом, также есть событие, идущее вниз по потоку в одном потоке и одновременно вверх по потоку в другом потоке на том же канале?
Наконец, какой поток выполняет ChannelFutures?
Все эти варианты использования вполне приемлемы и вовсе не являются критикой Netty, я на самом деле очень люблю библиотеку и использую ее повсюду.Просто, когда я пытаюсь делать с ним все более и более сложные вещи, я хочу понять больше о том, как он работает под капотом, чтобы я мог убедиться, что я использую правильное и только правильное количество (не больше, не меньше)синхронизации (блокировки).