我有一種情況,我需要同時讀取/寫入文件,但操作范圍有限:僅追加,沒有隨機偏移寫入從隨機位置讀取,我確定之前已經(jīng)寫入了內(nèi)容(通過附加,通過 golang 通道進(jìn)行內(nèi)部訪問序列化,以確保隨機讀取僅在附加內(nèi)容后發(fā)生)只有一個進(jìn)程在運行這是一個高負(fù)載的應(yīng)用程序,我想避免每次讀/寫鎖定文件我要打開 2 個文件 - 一個用于讀取,另一個僅用于附加這樣做會產(chǎn)生一些潛在的問題/錯誤嗎?如果我想避免每次讀/寫都鎖定文件,推薦的做法是什么?ps golang, linux, ext4
1 回答

長風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊
我假設(shè)“隨機讀取”實際上是指“任意讀取”。
如果我正確理解您的用例,您無需手動查找或鎖定或執(zhí)行任何操作。UNIX 通過O_APPEND
. 這是您可以執(zhí)行的操作:
用 . 打開文件
os.O_APPEND
。這樣每次寫入,無論之前的任何操作,都將轉(zhuǎn)到文件末尾閱讀時使用
File.ReadAt
. 這使您可以為讀取指定任意偏移量
使用此方案,您可以避免任何形式的鎖定:操作系統(tǒng)會為您完成。由于緩沖區(qū)緩存,這種方案甚至不是低效的:追加和讀取幾乎是獨立的。
- 1 回答
- 0 關(guān)注
- 227 瀏覽
添加回答
舉報
0/150
提交
取消