Netty:Boss Event Loop和Executor

时间:2015-02-23 02:00:15

标签: java netty event-loop

在我目前使用Netty的大多数示例中,我看到boss执行器是一个缓存的线程池。根据我的理解,事件循环应该只有一个线程,为什么我们需要一个缓存的线程池用于boss事件循环呢?

1 个答案:

答案 0 :(得分:8)

Netty的概念为EventLoopGroup,汇总了多个EventLoopEventLoop是单线程的,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);
}

您可以在此处查看:https://github.com/netty/netty/blob/master/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java