在我目前使用Netty的大多数示例中,我看到boss执行器是一个缓存的线程池。根据我的理解,事件循环应该只有一个线程,为什么我们需要一个缓存的线程池用于boss事件循环呢?
答案 0 :(得分:8)
Netty的概念为EventLoopGroup
,汇总了多个EventLoop
。 EventLoop
是单线程的,EventLoopGroup
大部分都不是。除非您正在进行旧的阻止I / O.
现在,老板与工人有什么关系。假设您正在谈论服务器实现,那么老板现在被称为parentGroup
和工作人员childGroup
。父处理接受器通道的I / O,即受限于服务器接受新请求的端口的I / O.孩子们将处理已接受连接的I / O.实际上,接受者通道应该由一个且唯一的线程来处理它。如果您将带有多个EventLoopGroup
的{{1}}传递给父级,那么它只会使用其中一个EventLoop
,所以最好重复使用同一个EventLoop
为父母和孩子。
EventLoopGroup
实际上提供了两个构造函数,一个构建一个组并将其重用于父级和客户端:
ServerBootstrap
和一个允许您显式传递父项和子项的那个:
@Override
public ServerBootstrap group(EventLoopGroup group) {
return group(group, group);
}