我刚开始研究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)
所有三个函数(Seek
,Write
,WriteAt
)都是使用不同的系统调用实现的:在Unix系统Write
上通过{{3}实现} WriteAt
里面有syscall.Write
。
由于Seek+Write
执行两个系统调用,而WriteAt
只需要一个系统调用,为了获得更好的性能,第二种方法是否应该首选?
答案 0 :(得分:2)
seek()
+ read()
和seek()
+ write()
都是一对系统调用,而pread()
和pwrite()
是单个系统调用。减少系统调用 - 提高效率。
您可以明确地选择WriteAt