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

我有一种情况,我需要同时读取/写入文件,但操作范围有限

  • 仅追加,没有随机偏移写入

  • 从随机位置读取,我确定之前已经写入了内容(通过附加,通过 golang 通道进行内部访问序列化,以确保随机读取仅在附加内容后发生)

  • 只有一个进程在运行

这是一个高负载的应用程序,我想避免每次读/写锁定文件

我要打开 2 个文件 - 一个用于读取,另一个仅用于附加

这样做会产生一些潜在的问题/错误吗?

如果我想避免每次读/写都锁定文件,推荐的做法是什么?

ps golang, linux, ext4


桃花长相依
浏览 187回答 1
1回答

长风秋雁

我假设“随机读取”实际上是指“任意读取”。如果我正确理解您的用例,您无需手动查找或锁定或执行任何操作。UNIX 通过O_APPEND. 这是您可以执行的操作:用 . 打开文件os.O_APPEND。这样每次写入,无论之前的任何操作,都将转到文件末尾阅读时使用File.ReadAt. 这使您可以为读取指定任意偏移量使用此方案,您可以避免任何形式的锁定:操作系统会为您完成。由于缓冲区缓存,这种方案甚至不是低效的:追加和读取几乎是独立的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go