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);
}
});
我遇到了 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);
}
});