IO模型:2、信号驱动模型

引用

一篇干货博客:

        select的原理和用法:FD_SET的使用

写在前面

        IO复用模型轮询IO就绪转态,其实在IO就绪前的轮询都是无意义的,浪费CPU的时间片。那有没有一种办法可以让IO就绪的时候反过来通知我们呢,这样便只存在一次交互。

模型概念

        信号驱动IO不再用主动询问的方式去确认数据是否就绪,而是向内核发送一个信号(调用 sigaction 的时候建立一个 SIGIO 的信号),线程不阻塞。当内核数据准备好后,再通过 SIGIO 信号通知应用进程,数据准备好后的可读状态。应用用户进程收到信号之后,立即调用 recvfrom ,去读取数据。

这解决了IO复用模型中工作线程等待IO就绪的问题,我们在IO就绪时才向内核发起IO请求取出数据。

总结

        该模型下去掉了轮询,使得cpu在能处在一个较为空闲的状态,将更多时间片给其他作业。其工作流程将IO请求分为就绪前和就绪后。

        •首先告诉内核需要发起IO,此后内核在IO就绪后通知应用层程序

        •程序发起IO获得数据,IO完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值