【问题标题】:EventLoop#submit() vs #execute() vs Channel#writeAndFlush()EventLoop#submit() vs #execute() vs Channel#writeAndFlush()
【发布时间】:2021-03-27 17:21:16
【问题描述】:

将字节写入通道时,这3种方法有什么区别?

在我的例子中,写入这些字节的线程不是属于通道的 EventLoop 的线程,我理解 IO 事件总是发生在通道分配的 EventLoop 线程上。

我试图通过尽快刷新这些字节来最大程度地减少延迟。 为了更好地了解我可以做些什么来优化这一点,我需要知道这 3 种将数据写入通道的方式之间的区别,以及我可能错过的任何其他方式?

byte[] data = ...
Channel channel = ...
// 1
channel.eventLoop().submit(() -> channel.writeAndFlush(data));

// 2
channel.eventLoop().execute(() -> channel.writeAndFlush(data));

// 3
channel.writeAndFlush(data);

【问题讨论】:

    标签: java multithreading netty java.util.concurrent netty-socketio


    【解决方案1】:

    所以对于你在这里所做的,除了writeAndFlush 的返回值是如何传播的之外,并没有太大的区别。

    【讨论】:

    • 谢谢@Norman。在我们的例子中,我们并不真正关心从 writeAndFlush 返回的未来,目标是尽快通过线路获取字节。除了返回值之外,这些方法之间是否存在计算/延迟差异?
    • 不是真的,只是直接调用writeAndFlush会导致更少的GC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2015-07-13
    • 1970-01-01
    • 2018-01-19
    • 2010-12-20
    • 2019-10-09
    • 2018-09-13
    相关资源
    最近更新 更多