gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:53:44 27 4
gpt4 key购买 nike

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

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

我能够通过在 JVM 中的所有客户端之间共享一个全局 EventLoopGroup 来解决这个问题,并使用引用计数来确保它被干净地启动和销毁,但这看起来更像是一个解决方法比预期的设计。

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

最佳答案

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

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

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

关于netty - 为什么通过 LocalChannel 连接的客户端需要 EventLoopGroup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359566/

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