相关概念:
在说五种IO通信模型之前,先说下几个容易混淆的概念,同步和异步,阻塞和非阻塞。
同步和异步:
主要是看调用方获取结果是主动发起的,还是被动通知的。主动发起的就是同步,被动通知的就是异步。
阻塞和非阻塞:
调用方调用某个方法后,在获取到返回结果之前。如果当前的线程处于挂起状态,什么都不能干,则是阻塞。如果当前线程是运行状态,可以处理其他任务,则是非阻塞。
举个例子,线程A调用了接口B后,一直等待接口的返回结果,则属于同步阻塞,如果线程A可以处理其它任务,但是需要不断轮询查看接口的返回结果,则属于同步非阻塞。如果线程A一直等着接口B的回调来获取结果,则属于异步阻塞,如果线程A可以处理其它任务,服务方会主动通知线程A的执行结果,则属于异步非阻塞。
五种IO通信模型
网络IO一般分为两步,第一步是等待数据,第二步是拷贝数据。由于等待数据一般会占用比较长的时间,为了提高IO效率,会考虑将步骤采用非阻塞的方式,或者异步的方式,或者采用多线程等。常见的IO模型有阻塞I/O、非阻塞I/O、多路复用I/O、信号驱动I/O、异步I/O。
1.阻塞I/O模型
阻塞IO交互上可以分为两个阶段: