I/O:
同步和异步
关注的是:消息通知机制
同步:调用发出之后,不会立即返回,但一旦返回,则返回最终结果;
异步:调用发出后,被调用方立即返回消息,但返回的并非最终结果,服务端通过状态,通知机制等来通知调用者,或者通过回调函数来实现(发出请求后,对方立即告诉你请求已受到,请等通知)
阻塞和非阻塞
关注的是:调用者等待被调用方返回结果时的状态
阻塞:调用结果返回之前,调用者会被挂起,调用者在得到返回结果才能继续
非阻塞:调用者在结果返回之前不会被挂起,即调用不会阻塞调用者。
I/O模型:
阻塞式IO:
非阻塞式IO:存在忙盲等待
IO 复用:调用者将请求提交给代理人,代理人再将请求提交给被调用者,select(),poll()
事件驱动型IO:被调用者收到调用者的请求后直接告诉调用者请求我已经收到,你现在可以干你的事情(非阻塞),但是调用者从被调用方拿数据的过程依然不能干其他事(阻塞),
通知:
边缘触发:只通知一次
水平通知:多次通知
异步IO:完全非阻塞
一次read请求。
(1)数据从磁盘到内核内存
(2)数据从内核内存到进程内存