Java NIO与DotNet IO性能

Java NIO与DotNet IO性能,java,.net,performance,file-io,Java,.net,Performance,File Io,有人知道这两者之间的性能差异吗 javanio与dotnetio的性能 阅读问题,似乎标准Java IO和DotNet IO 非常相似的IO性能 我感兴趣的是,Java的家伙们说,由于在Java NIO中访问文件通道等,所以大规模文件复制、基于文件服务器的操作等应该要快得多 有没有可能java.nio的性能比DotNetSystem.IO好 谢谢。我实际上无法回答这个问题,但我可以自由思考 。。Java文件IO和.Net都应该使用底层操作系统操作来访问文件,文件访问总是IO绑定的,而不是CPU绑

有人知道这两者之间的性能差异吗 javanio与dotnetio的性能

阅读问题,似乎标准Java IO和DotNet IO 非常相似的IO性能

我感兴趣的是,Java的家伙们说,由于在Java NIO中访问文件通道等,所以大规模文件复制、基于文件服务器的操作等应该要快得多

有没有可能
java.nio
的性能比DotNet
System.IO


谢谢。

我实际上无法回答这个问题,但我可以自由思考

。。Java文件IO和.Net都应该使用底层操作系统操作来访问文件,文件访问总是IO绑定的,而不是CPU绑定的。这意味着磁盘比CPU和内存慢

这意味着Java文件IO和.Net在性能方面应该是相同的

当谈到套接字通信时,Java做了一件可怕的工作,实际上只是忽略了Posix标准,没有使用OS调用“select”。这在JavaNIO中得到了修复,引入了“通道”,它实际上只支持底层架构。在您需要为正在阅读的每个套接字分配一个线程之前,浪费了大量资源

由于.Net比Java更新,我相信他们从未落入这个陷阱,并从一开始就增加了对它的支持。。但我还没有用过.Net,所以我可以说,我猜不出


关于Java NIO和.Net System.IO中的套接字通信,在它们成为CPU绑定之前,它们都应该是网络绑定的。所以我不认为其中一个会比另一个快。

至于文件复制,无论您使用的是什么平台或api,都不应该有明显的差异。瓶颈是硬盘的磁盘旋转和磁头寻找*

需要做的是将硬盘的内容移动到某个内存中,然后将内存写入硬盘。对于传统的JavaIO流,将有额外的内存拷贝。与磁盘速度相比,这仍然不是很大的浪费

这很容易验证,FileChannel.transferTo/From比不上旧的输入输出流复制方式

(*)当然,现在有快得多的磁盘,但只要我们将磁盘定义为仅次于内存的下一个较慢的存储,这个论点就成立了


(**)我们可以将虚拟磁盘称为磁盘,它实际上驻留在主内存中。那么内存拷贝就是瓶颈,这个论点不再成立了

在使用现代OSs的现代硬件上,JavaNIO的执行速度并不比JavaIO快。请参阅:。他指出,“现代操作系统中存在的极低成本到线程同步,再加上多核系统的爆炸性增长”,这就是为什么在Java中阻塞IO的性能优于非阻塞IO的一个因素“吞吐量不是NIO的重点。非阻塞IO的要点是能够以快速响应时间同时处理数百万个慢速连接——在这种情况下,线程在接受几千个连接后就会破坏堆栈并丢弃连接。”