IO模型总结
IO模型分为4种类型
1. 同步阻塞I/O:用户线程发起IO请求,如果io设备没有数据或没有准备好,则用户线程阻塞
2. 同步非阻塞I/O:用户线程发起IO请求,如果io设备没有数据或没有准备好,则用户线程直接返回,此时需要不停地轮询IO设备,效率较低
3. IO复用:多路复用(select或epoll),用户线程监听多个IO设备,如果某个IO设备准备好,select/epoll会返回数据准备好的io句柄,用户线程可以去将io设备的就绪数据读取到数据缓冲区,注意用户线程是阻塞在select/epoll调用上,对IO系统调用是不阻塞的,因为此时IO设备数据肯定是就绪的
4. 异步非阻塞I/O(AIO):用户线程发起异步IO调用,需要传递数据缓冲区和回调函数给操作系统,此后完全交给OS,OS将IO就绪的数据拷贝到用户数据缓冲区,并调用回调函数做数据处理,需要操作系统api支持
同步/异步:是指用户线程与内核的交互方式,同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数
阻塞/非阻塞:是指用户线程调用内核IO操作的方式,阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成

浙公网安备 33010602011771号