0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

麦辣鸡腿堡 来源:盼盼编程 作者:盼盼编程 2023-10-08 17:21 次阅读

多路 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
已完成,则在这整个过程中,进程完全没有被阻塞。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO
    IO
    +关注

    关注

    0

    文章

    370

    浏览量

    38150
  • 驱动
    +关注

    关注

    11

    文章

    1617

    浏览量

    83852
  • 网络
    +关注

    关注

    14

    文章

    7020

    浏览量

    86856
  • 模型
    +关注

    关注

    1

    文章

    2229

    浏览量

    47234
收藏 人收藏

    评论

    相关推荐

    IO模型以及多路复用的总结及视频资料

    介绍。  io多路复用总结
    发表于 12-18 16:04

    浅析java的IO模型

    IO初识与Linux网络IO模型简介
    发表于 08-05 06:28

    linux下的IO模型详解

    IO模型:阻塞IO模型,非阻塞IO模型IO复用模型,信号驱动IO模型异步IO模型,见下图  接下来一一讲解这5种
    发表于 10-09 16:12

    Linux铁三角之IO(一)—— IO模型

    IO(一)——
    发表于 06-12 15:52

    IO模型分别有哪几种?它们有什么异同?

    IO模型分别有哪几种?这几种IO模型的有什么相同点 ?这几种IO模型的有什么不同点?
    发表于 06-21 07:10

    IO多路复用的几种实现机制的分析

    IO模型,常见的IO模型有四种:同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行
    发表于 03-07 11:40 5468次阅读
    <b>IO</b><b>多路复用</b>的几种实现机制的分析

    网络IO的弊端以及多路复用IO的优势

    多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势。 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可。 阻塞
    的头像 发表于 08-25 18:01 1921次阅读
    网络<b>IO</b>的弊端以及<b>多路复用</b><b>IO</b>的优势

    一文详细了解五种IO模型

    IO模型包括:阻塞IO、非阻塞IOIO多路复用、信号驱动IO异步IO
    的头像 发表于 02-14 14:38 4368次阅读
    一文详细了解五种<b>IO</b><b>模型</b>

    如何改进开关/多路复用器LTspice模型

    多路复用器,那么还能改进开关/多路复用器LTspice模型吗?
    的头像 发表于 03-01 13:34 2348次阅读
    如何改进开关/<b>多路复用</b>器LTspice<b>模型</b>

    Linux驱动开发之IO模型介绍

    介绍五种IO模型,可以用来优化文件读写方式,降低CPU的使用率。
    发表于 07-29 09:03 474次阅读

    Linux驱动学习笔记:异步IO

    介绍了几种IO模型,今天介绍另一种IO模型——异步IO
    发表于 06-12 16:24 245次阅读

    基于多路复用模型的Netty框架

    多路复用模型的Netty框架,不仅降低了使用NIO的复杂度, 优点 Netty是一款以java NIO为基础,基于事件驱动模型支持异步、高并发的网络应用框架 API使用简单,开发门槛低,简化了NIO开发网络程序的复杂度 功能强大,预
    的头像 发表于 09-30 11:30 288次阅读