专栏首页嵌入式单片机linux下的IO模型---学习笔记

linux下的IO模型---学习笔记

 1、linux文件系统和缓存

  文件系统接口

  文件系统—一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问。

  存储层次

 文件系统缓存

  主存(通常时DRAM)的一块区域,用来缓存文件系统的内容,包含各种数据和元数据。

 2、深入Linux文件IO机制

  标准文件访问方式

  标准文件IO流程图

  直接IO

 实现方式

  open + O_DIRECT = 绕过内核缓冲区的直接访问,便有效避免了CPU和内存的多余时间开销。

  直接绕过IO绕过缓存,不会出现write成功数据丢失的情况,血案不再重演。

  注意:直接IO的缺点就是如果访问的数据不在应用程序缓存中,那么每次数据都会直接从磁盘进行加载,这种直接加载会非常缓慢!

  通常直接IO跟异步IO结合使用会得到较好的性能。

  缓存同步

  为了保证磁盘系统与缓冲区中内容一致,Linux系统提供了sync、fsync和fdatasync三个函数。

  函数描述:向打开的文件写数据;成功返回写入的字节数,若出错,返回-1。

  头文件:

  #include

  int fsync(int fd);

  int fdatasync(int fd);

  void sync(void);

  说明:

  sync ---将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。

  fsync --- 将fd对应的文件的块缓冲区立即写入磁盘,并等待实际写磁盘操作结束返回。

  fdatasync --- 类似fsybc,但只影响文件的数据部分。除数据外,fsync还会同步更新文件属性。

  解决之道

  更深一层次的思考

  1、如何设计IO读写的尺度,提高IO的效率

  2、如何理解随机IO和顺序IO

  3、高并发如何提高IO的效率和并发处理能力。

  ————————————————

原文链接:https://www.cnblogs.com/923327iu/p/12574218.html

相关文章

  • Linux下的5种IO模型的小结(转)

      接触网络编程,我们时常会与各种与IO相关的概念打交道:同步(Synchronous)、异步(ASynchronous)、阻塞(blocking)和非阻塞(n...

    用户6754675
  • 零基础入门c语言函数之递归函数

    return fibonacci(n - 1) + fibonacci(n - 2);

    用户6754675
  • 经典嵌入式工程师面试题分享给大家

    前几天去面试了一面笔试过了,我拍了照片保存了题目。后来我扫描了一下做成电子档的在这里分享给大家。

    用户6754675
  • Java|网络IO之同步、异步、阻塞、非阻塞

    黄小怪
  • Java中IO和NIO的本质和区别

    终于要写到java中最最让人激动的部分了IO和NIO。IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所...

    程序那些事
  • python并发编程

    py3study
  • Linux中IO多路复用机制

    之前的面试有问到主线程在 ActivityThread 里初始化 Looper 后调用了 Looper.loop() 这个死循环为什么不会阻塞主线程,当时回答因...

    萬物並作吾以觀復
  • 深入浅出Unix IO模型

    在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO的指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出...

    黄泽杰
  • 深入浅出Unix IO模型

    前言 在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO 指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入...

    黄泽杰
  • Redis 单线程模型介绍

    redis 将所有数据放在内存中,内存的响应时长大约为 100 纳秒,这是 redis 的 QPS 过万的重要基础。

    CoderJed

扫码关注云+社区

领取腾讯云代金券