| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 文件close后就一定持久化到硬盘了吗 -> 正文阅读 |
|
[系统运维]文件close后就一定持久化到硬盘了吗 |
文件close后就一定持久化到硬盘了吗背景关于文件操作的api是我们工作中经常使用到的. 同时, 我们工作中的一些编程语言都提供了库函数方便我们直接调用. 例如下面的ruby代码:
但是, 文件被close掉后, 就一定在硬盘中持久化了吗? 答案是: 操作系统的page cache想要了解答案的缘由, 需要先介绍一下操作系统(linux)的page cache. 我们知道:
为了加快程序的处理速度, 但是, 这样也会带来弊端. 就是缓存到内存的page, 如果有内容修改. 则内存的page数据与硬盘的数据不一致. 为了解决数据不一致的问题, 操作系统会在下面的特定的情况下将脏页写到硬盘中.
顺便提一下: 数据库缓存一般是自己实现的, 没有使用操作系统的page cache. 应用程序缓存了解到为了加快IO速度, 操作系统有page cache将硬盘的数据读取到内存中. 那么, 应用程序是否有类似的机制加快IO速度呢? 答案是肯定的. 一般的编程语言都有内部的缓存, 用于优化IO速度. 我们可以设想以下场景:
为什么ruby语言要这么做呢? 如果每次ruby执行write方法都真地去往文件中写, 那势必会影响性能. 但是, 这样也会有问题, 就是突然断电的话, 会导致文件没有持久化. 回顾closeFile#new, IO#close, linux man2 close 我们可以看到, 当ruby执行close方法后, ruby会关闭IO Stream 并把 Ruby 的 buffer flush. 但是, 我们在上文中也讲到: 由于操作系统的page cache. 因此, 如果此时断电的话, 文件有可能没有持久化到硬盘上. 那么, 如何解决呢? 可以执行
参考文章 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 22:41:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |