gpt4 book ai didi

java - Netty:Boss Event Loop 和 Executor

转载 作者:行者123 更新时间:2023-12-04 20:51:30 26 4
gpt4 key购买 nike

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

最佳答案

Netty 有 EventLoopGroup 的概念,它聚合了几个 EventLoopEventLoop 是单线程的,EventLoopGroup 大多不是。除非你在做旧的阻塞 I/O。

现在,老板与员工之间的关系。假设您正在谈论服务器实现,老板现在称为 parentGroup, worker 称为 childGroup。父级处理接受器 channel 的 I/O,即绑定(bind)到服务器接受新请求的端口的 channel 。 children 将为接受的连接处理 I/O。事实上,接受者 channel 应该由一个且唯一的线程处理,它会的。如果您将带有多个 EventLoopEventLoopGroup 传递给父级,它只会使用其中一个 EventLoop,所以一个好的做法是为父项和子项重用相同的 EventLoopGroup

ServerBootstrap 实际上提供了两个构造函数,一个接受单个组并将其重用于父级和客户端:

@Override
public ServerBootstrap group(EventLoopGroup group) {
return group(group, group);
}

还有一个允许您显式地为 parent 传递一个,为 child 传递一个:

public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {
super.group(parentGroup);
if (childGroup == null) {
throw new NullPointerException("childGroup");
}
if (this.childGroup != null) {
throw new IllegalStateException("childGroup set already");
}
this.childGroup = childGroup;
return this;
}

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

关于java - Netty:Boss Event Loop 和 Executor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com