下述均是基于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的调用都是阻塞的。