我有一种情况,我需要同时读取/写入文件,但操作范围有限:仅追加,没有随机偏移写入从随机位置读取,我确定之前已经写入了内容(通过附加,通过 golang 通道进行内部访问序列化,以确保随机读取仅在附加内容后发生)只有一个进程在运行这是一个高负载的应用程序,我想避免每次读/写锁定文件我要打开 2 个文件 - 一个用于读取,另一个仅用于附加这样做会产生一些潜在的问题/错误吗?如果我想避免每次读/写都锁定文件,推荐的做法是什么?ps golang, linux, ext4
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
我假设“随机读取”实际上是指“任意读取”。
如果我正确理解您的用例,您无需手动查找或锁定或执行任何操作。UNIX 通过O_APPEND
. 这是您可以执行的操作:
用 . 打开文件
os.O_APPEND
。这样每次写入,无论之前的任何操作,都将转到文件末尾阅读时使用
File.ReadAt
. 这使您可以为读取指定任意偏移量
使用此方案,您可以避免任何形式的锁定:操作系统会为您完成。由于缓冲区缓存,这种方案甚至不是低效的:追加和读取几乎是独立的。
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消