常见的网络 I/O 模型介绍(同步阻塞I/O、同步非阻塞I/O、异步I/O、I/O多路复用)

880 阅读1分钟

下述均是基于Liunx系统

阻塞、非阻塞、同步、异步 概念介绍

---阻塞/非阻塞是从函数调用的角度来说的
阻塞

如果读写没有就绪或者读写没有完成,则该函数一直等待。

非阻塞

函数立即返回,然后让应用程序轮询。

---同步/异步是从 “读写是由谁完成的” 角度来说的
同步

读写由应用程序完成(意味着读写过程中,应用程序无法处理新的任务)

异步

读写由操作系统完成(意味着此时应用程序是空出来的,可以处理新的任务),完成之后,回调或者事件通知应用程序。

按照上诉定义可知,异步I/O一定是非阻塞I/O,不存在既是异步I/O,又是阻塞的;同步I/O可能是阻塞的也可能是非阻塞的。归类后共有三种:同步阻塞I/O,同步非阻塞I/O,异步I/O。

I/O多路复用(select、poll、epoll)
select、poll、epoll 都是同步I/O,因为read和write函数都是由应用程序完成的,同时也是阻塞I/O,因为select、read、write的调用都是阻塞的。

后续继续补充。。。。