为什么通过LocalChannel连接的客户端需要EventLoopGroup?

时间:2013-08-21 14:02:08

标签: netty

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

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

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

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

1 个答案:

答案 0 :(得分:5)

EventLoopGroup旨在在多个客户端频道之间共享。您无需为自己创建的每个频道创建新的EventLoopGroup

我不确定为什么你必须为EventLoopGroup的生命周期引入引用计数,但是当你的应用程序即将终止时你可以关闭它。或者,您可以指定创建守护程序线程的ThreadFactory,然后JVM将终止而不等待EventLoopGroup创建的线程。 Netty实际上提供DefaultThreadFactory,这对于创建守护程序线程很方便。

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