高级IO
五种IO模型
- 阻塞IO
- ⾮阻塞IO
- IO多路转接
- 异步IO
- 信号驱动IO
阻塞IO
在内核将数据准备好之前, 系统调⽤会⼀直等待. 所有的套接字, 默认都是阻塞⽅式。
非阻塞IO
如果内核还未将数据准备好, 系统调⽤仍然会直接返回, 并且返回EWOULDBLOCK错误码。
⾮阻塞IO往往需要程序员循环的⽅式反复尝试读写⽂件描述符, 这个过程称为轮询. 这对CPU来说是较⼤的浪费, ⼀般只有特定场景下才使⽤.
信号驱动IO
内核将数据准备好的时候, 使⽤SIGIO信号通知应⽤程序进⾏IO操作。
IO多路转接
IO多路转接能够同时等待多 个⽂件描述符的就绪状态 。
异步IO
由内核在数据拷⻉完成时, 通知应⽤程序(⽽信号驱动是告诉应⽤程序何时可以开始拷⻉数据)。