『面试问答』:缓存IO、直接IO和裸IO的区别是什么?

面试官 : 请说一下,缓存IO、直接IO和裸IO的区别是什么?

缓存I/O(Buffered IO)又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间。

读操作时,先检查内核的缓冲区有没有需要的数据,如果已经缓存了,那么就直接从缓存中返回;否则从磁盘中读取,然后缓存在内核的缓存中。

写操作时,将数据从用户空间复制到内核空间的缓存中,这时对用户程序来说写操作就已经完成,至于什么时候再写到磁盘中由操作系统决定,除非显示地调用了sync同步命令。

直接IO(Direct IO)是应用程序直接读写文件,而不经过内核缓冲区,也就是绕过内核缓冲区,自己管理IO缓存区,这样做的目的是减少一次内核缓冲区到用户程序缓存的数据复制。

缓存IO和直接IO都是通过内核的文件系统读写文件,而裸IO(Raw IO)是绕过文件系统,直接对磁盘磁盘数据进行读写。

应用场景上,缓存IO通过将文件数据缓存到内核缓冲区中,可以减少磁盘读写的次数,从而提高性能,缓存IO适用于频繁读写小文件的场景。直接IO绕开了内核缓冲区,减少了操作系统缓冲区和用户地址空间的拷贝次数,适用于不需要频繁读写的大文件操作。裸IO绕过文件系统,直接读写磁盘块设备数据,一般在数据库中用得比较多。

#晒一晒我的offer##软件开发薪资爆料##我的实习求职记录##23届找工作求助阵地#
软件开发面试问答 文章被收录于专栏

分享软件开发岗位面试题及答案

全部评论

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务