IO

“Let us build ourselves a city, with a tower that reaches to the heavens, so that we may make a name for ourselves; otherwise we will be scattered over the face of the whole earth.”

文件描述符

文件描述符是一个整数, 表示了进程可读写的一个对象,文件描述符的一个很重要的作用是进行抽象,使得文件、管道或者设备都能够以相同的方式(byte流)进行操作。每一个进程都有一个私有的从0开始的文件描述符空间,其中有三个常开的fd,分别为:

  • 0:标准输入(读)
  • 1:标准输出(写)
  • 2:标准错误(写)

IO 设备

IO设备分类

按照使用特性

  • 人机交互
  • 存储设备
  • 网络通信
  • 低速、中速和高速

按照信息交换单位

  • 块设备:如磁盘等
  • 字符设备:打印机等

IO使用

IO多路复用机制

IO复用共有三种方式,即select、poll和epoll下面将针对这三种方式进行总结:

(1) select:时间复杂度为$O(n)$

select 仅仅知道有IO事件发生,但是不确定是哪几个流,我们只能无差别对所有流进行轮询,找出能读出数据或写入数据的流,对他们进行操作。

(2) poll:时间复杂度为$O(n)$

poll 本质和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,但是他没有最大连接限制,原因是基于链表存储。

(3) epoll:时间复杂度$O(1)$

epoll会把哪个流发生了什么样的IO事件通知我们,所以epoll实际上是事件驱动的,此时我们对这些流的操作都是有意义的。epoll是一种通过函数回调进行通知的机制。

参考文献

0%