多路IO复用模型和异步IO模型介绍

多路 io 复用模型
多路 io 复用,有时也称为事件驱动 io。它的基本原理就是有个函数会不断地轮询所负责的所有 socket ,当某个 socket有数据到达了,就通知用户进程。io 复用模型的流程如图:
当用户进程调用了 select ,那么整个进程会被阻塞,而同时,内核会 “监视” 所有 select 负责的 socket ,当任何一个 socket中的数据准备好了, select 就会返回。这个时候用户进程再调用 read 操作,将数据从内核拷贝到用户进程。
这个模型和阻塞 io 的模型其实并没有太大的不同,事实上还更差一些 因为这里需要使用两个系统调用,而阻塞 io 只调用了一个系统调用recvfrom,用 select 的优势在于它可以同时处理多个连接。
如果处理的连接数不是很高的话,使用 select/epoll web server 定比使用多线程的阻塞 io web server性能更好,可能延迟还更大;select/poll 的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
异步 io 模型
上面是异步 io 模型。
用户进程发起 read 操作之后,立刻就可以开始去做其他的事;而另一方面,从内核的角度,当它收到一个异步的 read请求操作之后,首先会立刻返回,所以不会对用户进程产生任何阻塞。
然后,内核会等待数据准备完成,然后将数据拷贝到用户内存中,当这一切都完成之后,内核会给用户进程发送一个信号,返回 read 操作已完成的信息。
调用阻塞 io 一直阻塞住对应的进程直到操作完成,而非阻塞 io 在内核还在准备数据的情况下会立刻返回。两者的区别就在于同步 io 进行 io操作时会阻塞进程。
非阻塞 io 在执行 recvfrom 这个系统调用的时候,如果内核的数据没有准备好,这时候不会阻塞进程。但是当内核中数据准备好时,recvfrom会将数据从内核拷贝到用户内存中,这个时候进程则被阻塞。
而异步 io 则不 样,当进程发起 io 操作之后,就直接返回,直到内核发送一个信号,告诉进程 io
已完成,则在这整个过程中,进程完全没有被阻塞。

陕西联通完成首次5G工业机器人巡检,全面助力陕煤集团数字化转型升级
通过采用热敏电阻实现周期转换电路的应用设计
传苹果有意打造更便宜的手机,欲与小米竞争
华为海思进退维谷,何去何从?
智能开关面板行业概览
多路IO复用模型和异步IO模型介绍
蓄电池快速充电技术
洞悉标准化蓝牙ESL应用潜力,探索理想的解决方案
放流防雷器的简单介绍
振南电子之STM32视频教程系列完全学习
2020到2025年全球中小尺寸TFT LCD出货量分析
或将斥巨资建立芯片工厂?三星如何解决产能吃紧问题?
哈工智能的非公开发行募资计划即将收官
独立显卡怎么安装
三态逻辑与非门电路图三种状态分析
浅析AR增强现实在2017年的五大发展趋势
2019年全球服务器市场调查:浪潮是全球唯一保持两位数增长的厂商
采用数字光耦实现UPS蓄电池组巡检系统的设计
中国联通总部IT云天宫平台扩容,和华为开启天宫国产化建设的新进程
诺基亚Lumia610或为最便宜wp系统手机