2017-01-21 4 views
1

私はちょうどGoのファイルシステム操作を勉強し始めました。書き込みランダムなファイルを実行するには、少なくとも2つの方法があるように思える:Go:Seek + Write対WriteAtパフォーマンス

// 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システムでWritesyscall.Writeを経由して実装されていますWriteAtsyscall.Pwriteです。

Seek+Writeは2つのシステムコールを実行しますが、WriteAtは1つのシステムコールしか必要としませんので、パフォーマンスを向上させるためには2番目の方法を優先しますか? pread()pwrite()が単一SYS-呼び出している間

答えて

2

seek() + read()seek() + write()両方SYS-コールの対です。より少ないsys呼び出し - より効率的です。

あなたは確かに行くことができますWriteAt

関連する問題