Netty 4 - EventLoopGroup - EventLoop - EventExecutor - 线程关联

use*_*169 18 netty

我正在研究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(Thread),因此会阻止分配给同一EventLoop(Thread)的所有其他Channel.这种解释是真的吗?
  • 试图避免这样的问题,我可以使用的长期运行的ChannelHandler一个EventExecutor,但根据的文件(见上面的链接),一个通道被卡住其EventExectuor内的单个线程,因此可能再次阻止其分配相同的其他频道线程(在EventExecutor中).我错过了什么或这是真的吗?

我只是想了解为什么事情就是这样,并获得有关Netty 4设计意图的一些信息.

tru*_*tin 8

这两个问题都是正确的.通过将处理程序分配给非I/O事件组,可以防止I/O线程被长时间运行的操作(如数据库访问)阻止.您可以EventExecutorGroup根据处理程序的作用指定大尺寸.它与通常的线程池没有什么不同.如果线程池忙,则任何执行长时间运行任务的尝试都将排队.