栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

write操作底层调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

write操作底层调用

open标志位

O_DIRECT绕过page_cache

O_APPEND目前nfs4不支持原子追加写入,本地文件系统通过inode锁可以实现原子写入。

java的write只是系统调用成功,写入page_cache,不代表写入到硬件存储上。

操作系统提供fsync,fdatasyn两个方法,满足用户同步数据到持久化设备,fdatasync尽可能不同步文件元数据以减少磁盘IO来提高性能。

RandomAccessFile打开文件的4中模式中rws会在open文件时传入O_SYNC标志位,rwd传入O_DSYNC已区分调用fsync还是fdatasync。

FileDescription类的sync方法在UNIX系统上底层调用是fsync,保证数据保存到持久化存储设备后返回。但是如果系统使用了硬盘本身的缓存,一般系统定时调用硬盘flush接口,即时fsync调用成功突然断电也有可能丢失数据。

对于写操作,有write back和write through两种机制,前者将数据写至缓存就会返回,而后者则会将数据写到磁盘介质上再返回。

如果想要保证调用fsync或fdatasync后数据一定能写到磁盘上,可以开启linux的write barrier,它可以控制在IO操作之前和之后刷新缓存来达到一定能写入磁盘的目的。Ext4 文件系统默认启用 barrier机制,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。类似java的happen-before原则

重要数据机房使用UPS断电保护很重要。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号