5种IO模型

来源:互联网 发布:linux 驱动编写步骤 编辑:程序博客网 时间:2024/05/21 10:19

进行I/O操作的时候,分为两个步骤:

  • 准备数据
  • 数据搬迁

Unix下共有5种I/O模型:

  1. 阻塞I/O
  2. 非阻塞I/O
  3. I/O复用(select & (e)poll)
  4. 信号驱动I/O(SIGIO)
  5. 异步I/O(Posix.1 的aio_系列函数)

前四种属于同步I/O,最后一种属于“异步I/O”。
区别:
- 异步I/O:操作完成后才会通知用户程序。
- 同步I/O:最后都要自己进行数据搬迁。

阻塞I/O
数据没有准备好的时候,一直处于阻塞状态。
非阻塞I/O
数据没有准备好,不发生阻塞,来来回回检查数据,直到数据准备好
I/O复用(select & (e)poll
select 和 poll 采用了阻塞的方式,数据没准备好的时候,会发生阻塞,与阻塞I/O不同的是,它可以一次阻塞多个I/O。
信号驱动I/O(SIGIO)
与非阻塞I/O很像,但是他不会来来回回检查数据是否准备好,而是僧数据准备好后,会有信号通知他,才回去对数据进行搬迁。
异步I/O(Posix.1的aio_系列函数)
调用aio_read函数,告诉内核描述字,缓冲区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,在通知应用程序。

阻塞与非阻塞区别 :

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
  • 非阻塞调用是指不能立刻得到结果之前,该调用 不会阻塞当前线程。
0 0
原创粉丝点击