Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当NIO是单线程的时候,为什么Netty使用引用计数而不是每个连接使用一个ByteBuffer?_Java_Real Time_Netty_Nio_Low Latency - Fatal编程技术网

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

Java 当NIO是单线程的时候,为什么Netty使用引用计数而不是每个连接使用一个ByteBuffer?,java,real-time,netty,nio,low-latency,Java,Real Time,Netty,Nio,Low Latency,我不明白为什么Netty 5.0会让您使用引用计数来计算ByteBuffers。JavaNIO不应该是单线程的吗?换句话说,一个选择器线程用于多个连接?每个客户端都需要自己的ByteBuffer,就是这样,除非我遗漏了什么,否则不需要池 @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf m = (ByteBuf) msg; // (1) try {

我不明白为什么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();
    }
}

资料来源:

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

有些连接处于空闲状态,因此为每个通道设置缓冲区是浪费的。@相信我的拙见,内存不是问题。复杂性是一个大问题!从不同的线程写入可以创建各种竞争条件,几乎没有优势。@PeterMel内存在处理100k连接时是个问题。100k通道*4KB缓冲区/通道=apx。400MiB?@trustin我认为现在400Mb的ram内存没有问题。我用几GB的ram内存运行JVM。