Netty:对 Channel.writeAndFlush 的线程行为感到困惑
Netty: Confused by threading behavior of Channel.writeAndFlush
我是 Netty 的新手,我还不太了解它。这是我觉得特别令人困惑的事情。
Channel.writeAndFlush 是异步的:它应该在 I/O 操作完成之前立即 return。但是,在下面的代码中,listener("Write operation complete")中的日志语句总是在writeAndFlush("Returned from writeAndFlush")调用之后的日志语句之前执行。
好的,没关系:I/O 速度很快,并且调用了侦听器。但是,两条日志语句总是在同一个线程.
上执行
所以在我看来,当我调用 writeAndFlush 时,该线程必须等待 I/O 完成,然后它正在调用侦听器。但是,如果该方法应该是异步的,那怎么可能呢?
private static class LoggingListener implements ChannelFutureListener {
public void operationComplete(ChannelFuture future) {
logger.debug("Write operation complete");
}
}
public void writeAndFlush(Object object) {
Channel channel = getChannel();
ChannelPromise promise = channel.newPromise();
promise.addListener(new LoggingListener());
channel.writeAndFlush(object, promise);
logger.debug("Returned from writeAndFlush");
}
Channel 将所有工作分配给它的 EventLoop
,它与 Thread
相关联,因此 writeAndFlush
本身将由与您的 Thread
不同的 Thread
执行如果您不是从 EventLoop
线程本身调用它,则调用线程。
如果您从 EventLoop
线程调用 writeAndFlush
,它将直接被执行,并且一旦完成就会通知未来,这可能是直接的,也可能是稍后。
我是 Netty 的新手,我还不太了解它。这是我觉得特别令人困惑的事情。
Channel.writeAndFlush 是异步的:它应该在 I/O 操作完成之前立即 return。但是,在下面的代码中,listener("Write operation complete")中的日志语句总是在writeAndFlush("Returned from writeAndFlush")调用之后的日志语句之前执行。
好的,没关系:I/O 速度很快,并且调用了侦听器。但是,两条日志语句总是在同一个线程.
上执行所以在我看来,当我调用 writeAndFlush 时,该线程必须等待 I/O 完成,然后它正在调用侦听器。但是,如果该方法应该是异步的,那怎么可能呢?
private static class LoggingListener implements ChannelFutureListener {
public void operationComplete(ChannelFuture future) {
logger.debug("Write operation complete");
}
}
public void writeAndFlush(Object object) {
Channel channel = getChannel();
ChannelPromise promise = channel.newPromise();
promise.addListener(new LoggingListener());
channel.writeAndFlush(object, promise);
logger.debug("Returned from writeAndFlush");
}
Channel 将所有工作分配给它的 EventLoop
,它与 Thread
相关联,因此 writeAndFlush
本身将由与您的 Thread
不同的 Thread
执行如果您不是从 EventLoop
线程本身调用它,则调用线程。
如果您从 EventLoop
线程调用 writeAndFlush
,它将直接被执行,并且一旦完成就会通知未来,这可能是直接的,也可能是稍后。