标签:must ati linux 表数据 either use necessary puts 种类
IO写入的过程是这样的:
用户数据 –> 进程IO缓冲区 –> 内核缓冲区 –> (磁盘缓冲区->磁盘)
通常我们认为一个写请求(注意我们讨论的粒度一定是一个request,在不同环节request可能会被拆分合并)落盘,则是在它从内核缓冲区(内存中的一块区域)刷到磁盘上(不关心磁盘缓冲区)。对于持久化存储磁盘,当数据落盘成功后,断电/宕机数据依然会在磁盘上。
缓冲区公共的作用是聚集小IO,提高性能。
在linux open()系统调用的时候可以指定flag来决定当前写出使用哪种类型IO。
O_RSYNC: this flag, which only affects read operations, must be used in combination with either O_SYNC or O_DSYNC. It will cause a read() call to block until the data (and maybe metadata) being read has been flushed to disk (if necessary). This flag thus gives the kernel the option of delaying the flushing of data to disk; any number of writes can happen, but data need not be flushed until the application reads it back.
如何保证写出数据落盘?
采用SYNC方式写出,或者采用DIRECT/默认方式写出后显式调用 sync/fsync/fdatasync等系统函数。
平时写出数据应采用哪种方式?
O_SYNC是最安全的,但是也是性能最低的。因此实际要从性能和安全两个角度去衡量。
标签:must ati linux 表数据 either use necessary puts 种类
原文地址:https://www.cnblogs.com/lhfcws/p/12202512.html