IO多路复用总结


用户空间和内核空间

用户空间:用户程序的运行空间
内核空间:Linux 内核的运行空间
用户空间和内核空间完全隔离。当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态

IO

用户空间发起IO调用,内核空间执行IO,获取数据后复制数据到用户空间,完成IO

同步阻塞IO

用户空间发起read请求,等待数据;
内核空间接收到数据,将数据拷贝到用户空间;
用户空间读到数据,返回,阻塞解除。

同步非阻塞IO

用户空间发起read请求,如果没有读到数据,立即返回并循环调用read请求;
内核空间接收到数据,将数据拷贝到用户空间;
用户空间读到数据,返回。

异步阻塞IO(IO多路复用)

用户空间发起read请求,并返回;
用户空间调用select、poll、epoll等方法等待接收数据;
内核空间接收到数据,发送消息到用户空间,进程发起read请求;
内核空间将数据拷贝到用户空间;
用户空间读到数据,返回。

异步非阻塞IO

用户空间发起read请求,并返回;
内核空间等待接收数据;
内核空间接收到数据,将数据拷贝到用户空间;
内核空间发送消息到用户空间;
用户空间读到数据,返回。

epoll

相比于select、poll,epoll采用epoll_ctl添加等待事件维护socket的等待队列,避免频繁地将用户进程加入到Socket等待队列;socket收到数据后,select需要将socket列表拷贝到用户空间,并遍历每一个socket确定哪一个socket存在数据,并对而socket数量限制。而epoll只关注rdlist,不需要遍历所有socket,也没有socket数量限制。
图示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLZH919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值