为了账号安全,请及时绑定邮箱和手机立即绑定

Golang同时读/写文件而没有显式文件锁定

Golang同时读/写文件而没有显式文件锁定

Go
桃花长相依 2022-01-17 10:48:21
我有一种情况,我需要同时读取/写入文件,但操作范围有限:仅追加,没有随机偏移写入从随机位置读取,我确定之前已经写入了内容(通过附加,通过 golang 通道进行内部访问序列化,以确保随机读取仅在附加内容后发生)只有一个进程在运行这是一个高负载的应用程序,我想避免每次读/写锁定文件我要打开 2 个文件 - 一个用于读取,另一个仅用于附加这样做会产生一些潜在的问题/错误吗?如果我想避免每次读/写都锁定文件,推荐的做法是什么?ps golang, linux, ext4
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

我假设“随机读取”实际上是指“任意读取”。

如果我正确理解您的用例,您无需手动查找或锁定或执行任何操作。UNIX 通过O_APPEND. 这是您可以执行的操作:

  1. 用 . 打开文件os.O_APPEND。这样每次写入,无论之前的任何操作,都将转到文件末尾

  2. 阅读时使用File.ReadAt. 这使您可以为读取指定任意偏移量

使用此方案,您可以避免任何形式的锁定:操作系统会为您完成。由于缓冲区缓存,这种方案甚至不是低效的:追加和读取几乎是独立的。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信