【发布时间】:2015-06-17 07:04:48
【问题描述】:
我正在使用 Netty 编写一个消息传递系统。在成功发送第一条消息之前,我无法发送后续消息(有时等待来自对等端点的发送响应)。我看到建议不要在 ChannelHandlerAdapter 中等待未来完成,因为它会占用 EventLoop 中的 cpu 周期。
然后的问题是 - 我如何在不等待 ChannelHandlerAdapter EventLoop 中的第一次发送完成或避免应用程序线程和 eventloop 线程之间的线程上下文切换的情况下实现这种顺序逻辑?
a) 如果我在 ChannelHandlerAdapter 中等待 ChannelFuture 完成,它会占用 CPU 周期。如果我在使用写入的 channelFuture 注册的侦听器中发送后续消息,则通过在使用此通道的 ChanelFuture 注册的侦听器中使用应用程序逻辑,这也会在 EventLoop 中占用 CPU 周期。
或者,
b) 如果我在应用程序线程中使用通道并写入该通道,则会有一个线程上下文从应用程序线程切换到通道线程。有没有办法在这个用例中避免这种线程上下文切换?
有没有更好的办法?
【问题讨论】:
标签: netty sequential event-loop context-switch