nginx的5中I/O模型

本文深入解析了五种I/O模型:阻塞式、非阻塞式、I/O多路复用(select,poll,epoll)、信号驱动式及异步I/O。详细阐述了每种模型的工作原理,包括进程阻塞、数据拷贝、多端口监听、信号处理及状态通知等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阻塞式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调用阻塞

转:https://www.cnblogs.com/LuckWJL/p/9884041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值