2

这实际上可能与客户的一般使用有关Bootstrap——显然,任何客户都需要该组。

但是,如果您在单个 JVM 上运行多个客户端,那么您真的会消耗大量内存,EventLoopGroup为每个客户端创建一个,并且您自己可以很容易地 OOM。

我能够通过EventLoopGroup在 JVM 中的所有客户端之间共享一个全局变量来解决这个问题,并使用引用计数来确保它被干净地初始化和销毁​​,但这似乎更像是一种解决方法,而不是预期的设计。

而且似乎没有任何EventLoopGroup实现只使用单线程执行程序,可以串行执行客户端的调用;我意识到这与 Netty 的异步性质有些不一致,但这是一个合法的用例。

4

1 回答 1

5

EventLoopGroup旨在在多个客户端通道之间共享。您不需要为EventLoopGroup您创建的每个频道都创建一个新频道。

我不确定你为什么必须在 的生命周期中引入引用计数EventLoopGroup,但你可以在应用程序即将自行终止时将其关闭。或者,您可以指定一个ThreadFactory创建守护线程的 JVM,然后 JVM 将终止而不等待创建的线程EventLoopGroup。Netty 实际上提供了DefaultThreadFactory方便创建守护线程的方法。

要制作EventLoopGroup单线程,只需指定1为构造函数参数。

于 2013-08-23T07:10:59.667 回答