nginx的5中I/O模型
阻塞式I/O模型
简介:进程会一直阻塞,直到数据拷贝完成
应用程序调用一个I/O函数,导致应用程序阻塞,等待数据准备好,如果数据没有准备好,一直等待。。数据准备好,从内核拷贝到用户空间,I/O函数返回成功
阻塞I/O模型图:在调用recv()/recvfrom(),发生在内核中等待数据和复制数据过程。
非阻塞式I/O
简介:我们把一个套接口设置为非阻塞就是告诉内存,当所请求的I/O操作无法完成时,不要惊进程睡眠,而是返回一个错误,河阳I/O函数会不断的测试数据是否准备好,没有准备好,继续测试,直到数据准备好为止。在测试的过程中会占用大量的CPU时间。
I/O多路复用(select,poll,epoll…):
简介:主要是select和epoll;对于一个I/O端口,两次调用,两次返回,比阻塞I/O并没有什么优势,只是能实现同时对多个I/O端口进行监听。
I/O复用模型会调用select,poll函数,这几个函数也会使进程阻塞,但是和阻塞I/O不同的,这个函数可以同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。
信号驱动式I/O(事件驱动)
简介:两次调用,两次返回
首先允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。昂数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。
异步I/O:
简介:数据拷贝的时候进程无需阻塞
当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态,通知和回调通知调用者输入输出操作。
总结
同步4个:阻塞IO、非阻塞IO、多路复用IO、信号驱使式IO
异步1个:异步IO
同步I/O引起进程阻塞,直到I/O操作完成
异步I/O不会引起进程阻塞
I/O复用先通过select调用阻塞