我一直在运行一些性能基准测试,用于在NFS位置和本地硬盘驱动器之间复制文件。我发现的非常令人惊讶的事情之一是Java FileChannel transferFrom()
API比transferTo()
快得多!对于5GB的文件传输,我发现transferFrom()
的速度提高了5倍。
为了进行更多研究,我使用strace跟踪了这两个操作中使用的syscall,发现transferTo()
使用sendFile
syscall和transferFrom()
使用pwrite
。
我不确定这种差异来自何处。有谁知道为什么会这样,或者我可以做些什么来调查这种差异?
谢谢!