代码之家  ›  专栏  ›  技术社区  ›  Peter Mel

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

  •  3
  • Peter Mel  · 技术社区  · 10 年前

    我很困惑为什么Netty 5.0让您对ByteBuffers使用引用计数。JavaNIO不应该是单线程的吗,换句话说,一个选择器线程用于多个连接吗?每个客户端都需要自己的 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

    1 回复  |  直到 10 年前
        1
  •  2
  •   Norman Maurer    10 年前

    这是因为我们不知道人们会用ByteBuf做什么。此外,我们还支持从不同线程等进行编写。