- 阻塞式I/O:如果没有数据供读/写,进入睡眠,直到有数据供读/写,直接完成,从第一阶段开始一直阻塞。
- 非阻塞式I/O:如果没有数据供读/写,返回错误,若有,直接读/写,若第一阶段准备好,阻塞在第二阶段
- I/O复用:poll, select, pselect, 检测文件描述符状态,第一阶段阻塞在函数本身,第二阶段阻塞在读/写调用
- 信号驱动式I/O:使用信号,让内核在第一阶段结束时通知进程,进程阻塞在第二阶段
- 异步I/O:内核直到全部完成两个阶段,才通知进程。。。(甩手掌柜既视感。。。)
简单归纳如下图:

