gpt4 book ai didi

java - 从 Netty 5 中的多路复用 channel 传送

转载 作者:行者123 更新时间:2023-11-30 11:17:58 32 4
gpt4 key购买 nike

由于 Netty Channel 使用单个线程进行入站和出站处理,我很想知道在使用多路复用协议(protocol)(例如 SPDY)时传送入站数据的推荐做法。想到的几个选项:

1) 使用 channel 线程将所有流的数据传送到应用程序(即非 channel 代码)。在这种情况下,交付不会引起额外的上下文切换。应用程序必须知道将任何繁重的工作推迟到它自己的线程上,以便成为一个“好的消费者”。如果没有,它可以有效地阻止 channel 上的任何写入发生一段时间(因为读取和写入都使用相同的线程)。

2) 使用单独的执行器进行交付(可选地对每个流使用线程关联)。在这种情况下,我们很早就进行了上下文切换。阻塞传递线程的应用程序不会阻塞 Netty 的管道。这样做的缺点是,在某些(可能很多)情况下,应用程序逻辑可能相当轻量级,可能无法保证上下文切换。

3) 引入一个多线程 EventLoop,每个流都有线程关联。然而,这似乎违反了当前 channel 是单线程的假设。我不确定这是否可行。也许对 Netty 内部结构有更多了解的人可以证实?

有没有人知道其他注意事项或有我错过的其他选项?

最佳答案

您可以做的是将“应用程序逻辑”(会阻塞 io 线程)放入一个额外的 ChannelHandler 中,并使用自定义 EventExecutorGroup 将其添加到 ChannelPipeline。通过这种方式,处理从 EventLoop 转移到 EventExecutorGroup 提供的 EventExecutor。

关于java - 从 Netty 5 中的多路复用 channel 传送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070240/

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