Netty:对Channel.writeAndFlush的线程行为感到困惑
我对内蒂很陌生,我不会经常接触它。我发现有一点特别令人困惑 Channel.writeAndFlush是异步的:它应该在I/O操作完成之前立即返回。但是,在下面的代码中,侦听器中的log语句(“Write operation complete”)总是在调用writeAndFlush(“从writeAndFlush返回”)之后的log语句之前执行 好的,这很好:I/O很快,侦听器被调用。但是,这两条日志语句始终在同一个线程上执行 在我看来,当我调用writeAndFlush时,线程必须等待I/O完成,然后才调用侦听器。但是,如果该方法被认为是异步的,那怎么可能呢Netty:对Channel.writeAndFlush的线程行为感到困惑,netty,Netty,我对内蒂很陌生,我不会经常接触它。我发现有一点特别令人困惑 Channel.writeAndFlush是异步的:它应该在I/O操作完成之前立即返回。但是,在下面的代码中,侦听器中的log语句(“Write operation complete”)总是在调用writeAndFlush(“从writeAndFlush返回”)之后的log语句之前执行 好的,这很好: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");
}
通道将所有工作分派到其
EventLoop
,该线程绑定到线程
,因此writeAndFlush
本身将由另一个线程执行,如果您不是从EventLoop
线程本身调用它,则调用线程将执行该writeAndFlush
如果从EventLoop
线程调用writeAndFlush
,它将直接执行,完成后将通知未来,可能是直接执行,也可能是稍后执行