Go:Seek + Write vs WriteAt性能

时间:2017-01-21 16:41:09

标签: performance file go

我刚开始研究Go的文件系统操作。似乎至少有两种方法可以执行随机文件写入:

// 1. First set the offset, then write data 
f.Seek(offset, whence)
f.Write(data)

// 2. Write by offset in one step
f.WriteAt(data, offset)

所有三个函数(SeekWriteWriteAt)都是使用不同的系统调用实现的:在Unix系统Write上通过{{3}实现} WriteAt里面有syscall.Write

由于Seek+Write执行两个系统调用,而WriteAt只需要一个系统调用,为了获得更好的性能,第二种方法是否应该首选?

1 个答案:

答案 0 :(得分:2)

seek() + read()seek() + write()都是一对系统调用,而pread()pwrite()是单个系统调用。减少系统调用 - 提高效率。

您可以明确地选择WriteAt