阻塞I/O
非阻塞IO
同步
用户进程自己去查询数据是否就绪
异步
不用自己,内核把数据拷贝到了buffer,通知用户程序去读取
多路复用
多个IO事件会注册到select上,select监听多个IO,当有就绪的IO事件,select返回IO的状态,程序调用IO会阻塞
select的实现方式有如下几种:
select
select底层,内核存储fd使用的是数组,默认1024,不能扩容,select底层没有开辟空间存储fd,所以每次用户程序都要将fd传输给select
poll
poll过程和select一样,内核存储fd使用的是链表
epoll
epoll底层开辟了空间使用红黑树会存储fd,所以用户态不需要