Я изучаю код Netty 4.0.0.Alpha5, чтобы узнать, как обрабатывается threading. Я также прочитал введение в новую модель Threading Netty 4 в http://netty.io/wiki/new-and-noteworthy-in-4.0.html#wiki-h2-34.
Как я понимаю, цели заключаются в следующем:
- Связывание потоков, привяжите канал к одному потоку (EventLoop). Я предполагаю, что этот подход был предпринят для уменьшения промахов в кэше и улучшения ситуации на оборудовании NUMA.
Итак, мне интересно, правильна ли моя интерпретация или нет. И если я прав, то возникает следующий вопрос:
- Наличие возможно длинного канала ChannelHandler (например, операции с базой данных) в ChannelPipeline может блокировать EventLoop (Thread) и поэтому блокирует все другие каналы, назначенные одному и тому же EventLoop (Thread). Является ли это толкование истинным?
- Пытаясь избежать этой проблемы, я могу использовать EventExecutor для длинного канала ChannelHandler, но в соответствии с документацией (см. ссылку выше) канал снова привязан к одному потоку в своем EventExectuor и, следовательно, может снова блокировать другие Каналы, которые назначил ту же тему (внутри EventExecutor). Я что-то пропустил или это правда?
Я просто пытаюсь понять, почему все так и есть, и получить некоторую информацию о намерениях проекта Netty 4.