我正在研究 Netty 4.0.0.Alpha5 代码,以了解如何处理线程。我还在http://netty.io/wiki/new-and-noteworthy-in-4.0.html#wiki-h2-34阅读了 Netty 4 新线程模型的介绍。
据我了解,目标是:
- 线程亲和性,将 Channel 粘贴到单个线程(EventLoop)。我想这种方法是为了减少缓存未命中并改善 NUMA 硬件的情况。
所以,我想知道我的解释是否正确。如果我是对的,那么就会出现以下问题:
- 在 ChannelPipeline 中有一个可能长时间运行的 ChannelHandler(例如数据库操作)可能会阻塞 EventLoop(线程),因此会阻塞分配给同一 EventLoop(线程)的所有其他 Channel。这种解释是真的吗?
- 为了避免这个问题,我可以为长时间运行的 ChannelHandler 使用 EventExecutor,但是根据文档(参见上面的链接),Channel 再次卡在 EventExectuor 中的单个线程上,因此可能会再次阻塞分配相同的其他 Channel线程(在 EventExecutor 内)。我错过了什么还是这是真的?
我只是想了解为什么事情是这样的,并获取有关 Netty 4 设计意图的一些信息。