第一节 术语:
异步和同步:
关注于消息通信机制。同步指发起一次请求,被请求者要求程序一直等待返回结果,不做其他事;异步是发起一次请求,其他不用管,被请求者在有结果之后通过状态,通知,回调函数来告诉请求者处理数据。
阻塞和非阻塞:
关注请求者发送请求之后的状态。阻塞指请求者发出一次请求,一直等待返回结果,不做其他事情;非阻塞指请求者发出一次请求,就去干别的的了,不是过来检查有没有结果。
AIO、NIO和BIO:(以向Socket写一段数据为例)
BIO指同步阻塞IO:程序建立连接确认可以写数据了,写数据,确认写完数据,接受回复,所有操作一气呵成;
NIO可以只异步阻塞:程序建立一个连接发送一段数据,确认写完数据,离开不管了。有回复?处理一下;
NIO又可以指同步非阻塞:程序寻找有没有连接需要写入数据,找到一个需要写数据的链接,写入数据,确认回复,闪人;
AIO指异步非阻塞:程序寻找有没有连接需要写数据,找到一个需要写数据的链接,写入数据,离开。不给回复?不回就不回。
第二节 IO通信的五种模型 A请求B为例子
阻塞IO模型:A向B发出请求数据,B处理请求数据,B准备响应数据,B向A返回数据;在整个过程A,B都不会进行其他操作。
非阻塞IO模型:A向B发出求情数据,B回复没有准备好,A喝口茶歇一会再发,B准备好了将响应数据传输给A。过程中A没有一直等待B准备好。
IO复用模型:A和B,A和C都建立了连接,发送了请求数据,过一会检查有哪些连接数据准备好了,就去读取数据。
信号驱动模型:A向B发出信号说,我要xx数据,好了告诉我,我去做其他事了。B数据准备好之后,告诉A,数据有了。A又向B发出数据请求,B回复数据。
异步IO: A向B发出信号说,我要xx数据,好了数据放保安室,我去做其他事了。B数据准备好之后,告诉A,数据放保安室了。A在保安室取数据。
个人理解,不妥之处,欢迎指正。starktan@163.com