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

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