这实际上可能与客户一般使用Bootstrap
有关 - 显然该组是任何客户都需要的。
但是如果你在一个JVM上运行多个客户端,那么你真的会占用大量内存为每个客户端创建一个EventLoopGroup
,并且可以很容易地自己完成OOM。
我能够通过在JVM中的所有客户端之间共享一个全局EventLoopGroup
来解决这个问题,并使用引用计数来确保它干净利落地被破坏,但这似乎更像是一个解决方法而不是预期的设计。
似乎没有任何EventLoopGroup
实现只使用单线程执行程序,这将执行串行客户端的调用;我意识到这与Netty的异步性质有些不一致,但它是一个合法的用例。
答案 0 :(得分:5)
EventLoopGroup
旨在在多个客户端频道之间共享。您无需为自己创建的每个频道创建新的EventLoopGroup
。
我不确定为什么你必须为EventLoopGroup
的生命周期引入引用计数,但是当你的应用程序即将终止时你可以关闭它。或者,您可以指定创建守护程序线程的ThreadFactory
,然后JVM将终止而不等待EventLoopGroup
创建的线程。 Netty实际上提供DefaultThreadFactory
,这对于创建守护程序线程很方便。
要使EventLoopGroup
单线程,只需将1
指定为构造函数参数。