Netty - 使用 EventLoop 组合操作?

Netty - Using the EventLoop to combine operations?

我遇到了 this 的建议,即通过使用底层通道的 EventLoop 将它们一起执行来组合操作。在提供的示例中,使用了写操作。我的假设是写入操作已经在 Netty 提供的 I/O 线程(EventLoop?)上异步完成......那么为什么有必要使用分配给通道的 EventLoop 执行多个操作?

此外,如果在 EventLoop 线程上执行操作提供了某种性能优势,那么为什么它只适用于多个操作而不适用于单个操作?

如有任何澄清,我们将不胜感激!谢谢

据我了解,当您在 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);
  }
});