I/O模型分类:阻塞型、非阻塞型、复用型、信号驱动型、异步;
1>同步/异步:关注消息通知机制;
同步:等待对方返回消息;
异步:被调用者通过状态、通知或回调机制通知调用者,告知被调用者的运行状态;
2>阻塞/非阻塞:关注调用者在等待结构返回之前所处的状态;
阻塞:blocking,调用结果返回之前,调用者被挂起;
非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起;
—-> 同步阻塞、同步非阻塞、异步非阻塞;
11>一次文件IO请求,由2个阶段组成;
第一步:等待数据,即等待数据从磁盘加载到内核内存;
第二步:复制数据,即数据从内核内存复制到进程内存;
—->
阻塞型IO:同步阻塞,上面2段请求都被阻塞,调用者都被挂起;
非阻塞型IO:同步非阻塞,第一段请求处于非阻塞状态,第二段请求处于阻塞状态;
复用型IO:同步阻塞,上面2段都处于阻塞状态,但阻塞对象是复用器(内核级);
信号驱动型IO:异步非阻塞,第一段请求处于非阻塞状态,第二段请求处于阻塞状态;
异步IO:异步非阻塞,上面2段请求都处于非阻塞状态;
复用型IO调用有2种类型;
select():复用器最多能监控1024路IO;BSD研发;
poll:复用器监控的IO数量没有限制;UNIX类;
备注,httpd的prefork用的就是select()复用型IO调用;
信号驱动型IO(event-driven);
epoll(linux):由libevent程序包提供相关库文件;
kevent(BSD):
/dev/poll(Solaris):
**********************************************************
