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

    文章

    448

    浏览量

    39148
  • 驱动
    +关注

    关注

    12

    文章

    1839

    浏览量

    85281
  • 网络
    +关注

    关注

    14

    文章

    7561

    浏览量

    88760
  • 模型
    +关注

    关注

    1

    文章

    3238

    浏览量

    48824
收藏 人收藏

    评论

    相关推荐

    Linux驱动开发之IO模型介绍

    在Linux驱动开发中,应用程序通过循环读取或者中断的方式都会使得CPU的占用率很高。本文介绍五种IO模型,可以用来优化文件读写方式,降低CPU的使用率。
    发表于 07-29 09:03 829次阅读

    Linux驱动学习笔记:异步IO

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

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

    系统处理请求的能力。 有了NIO之后,一个线程即可处理多个连接事件,基于多路复用模型的Netty框架,不仅降低了使用NIO的复杂度, 优点 Netty是一款以java NIO为基础,基于事件驱动模型支持
    的头像 发表于 09-30 11:30 829次阅读

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

    于用户态和内核的地址空间之间,而无论这些文件描述符是否就绪。它的开销随着文件描述符数量的增加而线性增加。  所以之后又出现了一个select和poll的增强版本epoll,此处就不做过多的介绍。  io多路复用总结
    发表于 12-18 16:04

    浅析java的IO模型

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

    linux下的IO模型详解

      开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型
    发表于 10-09 16:12

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

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起
    发表于 03-07 11:40 5735次阅读
    <b class='flag-5'>IO</b><b class='flag-5'>多路复用</b>的几种实现机制的分析

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

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

    一文详细了解五种IO模型

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

    信号驱动IO异步IO的区别

    一. 谈信号驱动IO (对比异步IO来看) 信号驱动IO 对比 异步 IO进行理解 信号驱动
    的头像 发表于 11-08 15:32 1068次阅读
    信号驱动<b class='flag-5'>IO</b>与<b class='flag-5'>异步</b><b class='flag-5'>IO</b>的区别

    linux异步io框架iouring应用

    完善的异步IO(网络IO、磁盘IO)机制。 在网络编程中,我们通常使用epoll IO多路复用
    的头像 发表于 11-08 15:39 677次阅读
    linux<b class='flag-5'>异步</b><b class='flag-5'>io</b>框架iouring应用

    异步IO框架iouring介绍

    提供完善的异步IO(网络IO、磁盘IO)机制。 在网络编程中,我们通常使用epoll IO多路复用
    的头像 发表于 11-09 09:30 2414次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>IO</b>框架iouring<b class='flag-5'>介绍</b>

    IO多路复用基本概念

    一、IO多路复用基本概念 select、poll、epoll都是IO多路复用的机制。IO多路复用
    的头像 发表于 11-10 16:34 1461次阅读
    <b class='flag-5'>IO</b><b class='flag-5'>多路复用</b>基本概念

    什么是io多路复用IO多路复用的优缺点

    IO多路复用是一种同步IO模型,它允许单个进程/线程同时处理多个IO请求。具体来说,一个进程/线程可以监视多个文件句柄,一旦某个文件句柄就绪
    的头像 发表于 01-18 15:48 1652次阅读

    一文解读Linux 5种IO模型

    Linux里有五种IO模型:阻塞IO、非阻塞IO多路复用IO、信号驱动式
    的头像 发表于 11-09 11:12 318次阅读
    一文解读Linux 5种<b class='flag-5'>IO</b><b class='flag-5'>模型</b>