java - 当 NIO 是单线程时,为什么 Netty 使用引用计数而不是每个连接只使用一个 ByteBuffer?

标签 java real-time netty nio low-latency

我很困惑为什么 Netty 5.0 让你对 ByteBuffer 使用引用计数。 Java NIO 难道不应该是单线程的,换句话说,一个选择器线程用于多个连接吗?每个客户端都需要自己的 ByteBuffer,仅此而已,除非我遗漏了什么,否则不需要池化。

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
    ByteBuf m = (ByteBuf) msg; // (1)
    try {
        long currentTimeMillis = (m.readUnsignedInt() - 2208988800L) * 1000L;
        System.out.println(new Date(currentTimeMillis));
        ctx.close();
    } finally {
        m.release();
    }
}

来源:http://netty.io/wiki/user-guide-for-5.x.html

最佳答案

这是因为我们不确切知道人们会用 ByteBuf 做什么。我们还支持从不同的线程等编写。

关于java - 当 NIO 是单线程时,为什么 Netty 使用引用计数而不是每个连接只使用一个 ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403388/

相关文章:

sockets - Sails.js 0.10-rc5中的实时模型事件

java - 动态地从另一个 XML 文件填充 XML 数据 (Java)

linux cpuset 不工作

java - Jython 将 java File 对象数组从 python 发送到 java 类

c++ - 如何克服C++对嵌入式系统缺乏工具支持的问题?

java - Netty:如何从 `EventLoop` 获取单线程执行器?

java - 无论如何从 URL 中删除参数

java - Netty客户端只使用一个线程

java - 映射后加载 fxml 时,spring 出现 javafx 应用程序异常

java - 当提供 Magnet URI 时,BitTorrent 对等点如何获取信息字典?