nginx / Web Service

15.1 I/O模型

 

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):

**********************************************************

Leave a Reply

Your email address will not be published. Required fields are marked *