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操作彻底完成

posted @ 2016-03-17 14:46  王堃  阅读(103)  评论(0)    收藏  举报