Netty 4 EventExecutorGroup关闭

时间:2013-03-28 06:32:03

标签: netty

我正在使用Netty 4.0.0.Beta2

我有一个配置了多个处理程序的管道,最后一个在自己的EventExecutorGroup中运行。有点像这样:

DefaultEventExecutorGroup separateGroup = new DefaultEventExecutorGroup();

ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(AGGREGATE, new SomeHandler());
pipeline.addLast(ENCODE, new OtherHandler());
pipeline.addLast(extractEventGroup, EXECUTE, new ExecuteHandler());
然后,我将具有此管道配置的ServerBootstrap配置为ChannelInitalizer的一部分。

当服务器运行时,我会跟踪ChannelGroup中名为“channels”的所有当前客户端

稍后,当我关闭服务器时,我会刷新并关闭所有频道,然后调用

bootstrap.shutdown();

关闭了NIO EventExecutorGroup,但没有关闭我为ChannelHandler添加到管道的单独的DefaultEventExecutorGroup - 这意味着JVM不会因为线程仍处于活动状态而退出(只是等待,但不会被释放)。

我有点意外,这也没有关闭,所以我现在继续引用DefaultEventExecutorGroup并在我的bootstrap.shutdown()调用之后手动关闭它:

separateEventGroup.shutdown();

我是否遗漏了某些内容,或者这是Netty的预期行为?

2 个答案:

答案 0 :(得分:1)

这实际上不是一个错误,而是一个预期的行为。想想运行多个协议服务器的JVM。假设这些服务器执行磁盘I / O,并且您希望限制在JVM上执行阻塞磁盘I / O的线程数。您可以为执行磁盘I / O的处理程序创建共享EventExecutorGroup,并在JVM中的多个协议服务器上使用它。

答案 1 :(得分:-1)

我认为你是对的,这是一个错误..你能否打开一个错误报告,以便我们不要忘记解决它?

https://github.com/netty/netty/issues