我偶然发现了这的建议,即通过使用底层通道的EventLoop一起执行它们来组合操作。在提供的示例中,使用了写操作。我的假设是,写操作已经在I/O线程( EventLoop?)上异步完成了。由Netty提供..。那么,为什么需要使用分配给通道的EventLoop执行多个操作呢?
另外,如果在EventLoop线程上执行操作提供了某种性能好处,那么为什么这只适用于多个操作而不适用于单个操作?
如有任何澄清,将不胜感激!谢谢。
发布于 2015-10-11 08:46:30
正如我所理解的,当您在EventLoop之外调用此代码时
channel.write(msg1);
channel.writeAndFlush(msg3);它在引擎盖下转换为:
channel.eventLoop().execute(new Runnable() {
@Override
public void run() {
channel.write(msg1);
}
});
channel.eventLoop().execute(new Runnable() {
@Override
public void run() {
channel.writeAndFlush(msg3);
}
});因此,为了减少调度开销,最好将它们合并为一个:
channel.eventLoop().execute(new Runnable() {
@Override
public void run() {
channel.write(msg1);
channel.writeAndFlush(msg3);
}
});https://stackoverflow.com/questions/33062015
复制相似问题