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

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

3天内不再提示

一文解读Linux 5种IO模型

Linux爱好者 来源:Linux爱好者 2024-11-09 11:12 次阅读

Linux里有五种IO模型:阻塞IO、非阻塞IO、多路复用IO、信号驱动式IO和异步IO,我发现这五种IO模型,其实能和吃饭这件事关联起来。

阻塞IO(Blocking I/O)

阻塞IO是最常见的IO模型。

当发起一个IO操作时,比如读取数据,系统会调用read()函数。如果请求的数据没有准备好,此时进程会被挂起(blocked),进入等待状态。直到数据准备好,而且复制到应用进程的缓冲区,这时候才会返回。

从调用到返回,整个时间段都是阻塞的,所以被称为阻塞IO。

17f10f3e-9041-11ef-a511-92fbcf53809c.png

阻塞IO

就像是手机没电的时候,去饭馆吃饭,我点完菜,只能等着厨师做好,服务员端上来,我才能愉快干饭。这段时间,我就只能坐在座位上干等。

非阻塞IO(Non-Blocking I/O)

阻塞IO,还是比较浪费资源的,那么非阻塞IO就来了。

所谓非阻塞IO,是在调用IO操作时,如果缓冲区没有数据的话,直接返回一个错误码。应用进程需要不断轮询,来检查数据是否准备好。数据准备好了,就返回数据。

180c28be-9041-11ef-a511-92fbcf53809c.png

非阻塞IO

就像是我奢侈一把,想吃个西餐,于是就去了肯德基,点完餐,我就可以坐着刷刷手机。当然,我还需要时不时地看看我的餐是不是已经备好,餐备好了,就去取一下。

多路复用IO(I/O Multiplexing)

虽然非阻塞IO相比阻塞IO,性能提升了很多,但是轮询过程中,还是有大量的系统调用,上下文切换的开销比较大。

那么,多路复用IO就来了。

多路指的是多个数据通道,复用指的是一个进程可以同时监控多个文件描述符(比如socket),当某个文件描述符状态发生变化(比如变得可读或可写),多路复用的函数将返回变化的文件描述符。

这样,在数据传输过程中,同一个进程中不同的任务都能被处理。特点是在数据传输过程中,进程能够同时处理多个任务,提高了程序的效率。

select、poll、epoll 等都是 I/O 多路复用的具体实现。

以select/poll为例,进程通过将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,这样select/poll可以侦测多个fd是否处于就绪状态。当有fd就绪时,立即回调函数rollback,接下来就可以进行读取。

1821e5a0-9041-11ef-a511-92fbcf53809c.png

多路复用IO

就像是我想吃顿好的,于是选择去吃自助餐,自助餐有很多餐区,我先看看哪个餐区有我想吃的菜,然后端着盘子去取就行了,一个人就可以取多个菜,肉、蔬菜、水果,什么都能吃一点,而且不用怎么等。

信号驱动式IO(Signal-Driven I/O)

信号驱动式IO利用信号机制来进行数据传输。

进程首先告诉内核,当数据准备好时,请发送一个SIGIO信号。进程继续执行其他任务,等到收到信号后,再开始进行数据传输。

183a8d76-9041-11ef-a511-92fbcf53809c.png

信号驱动IO

就像是我去吃饭,外带,跟服务员打声招呼,餐好了通知我,这时候我就可以去干其它事情,餐备好之后,服务员通知我,我取餐就行了。

异步IO(Asynchronous I/O)

异步IO是指当发起一个IO操作后,系统会立即返回。异步IO操作在后台进行数据传输,数据传输完成后,系统将通知进程。这样,在整个数据传输的过程中,进程都可以执行其他任务,不需要等待。

1853a55e-9041-11ef-a511-92fbcf53809c.png

异步IO

就像是准备吃饭了,我自己懒得动,直接在某团上点个餐,点完之后爱干啥干啥,等着快递小哥给我送到就行了。

可以看到,阻塞和非阻塞主要指的是等待数据这个过程应用进程需不需要挂起,同步和异步指的是等待数据和数据拷贝这两个过程应用进程需不需要挂起,只有异步IO做到了完全异步。

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

    关注

    0

    文章

    437

    浏览量

    39096
  • Linux
    +关注

    关注

    87

    文章

    11236

    浏览量

    209024

原文标题:一顿饭的事儿,搞懂 Linux 5 种 IO 模型

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux驱动开发之IO模型介绍

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

    Linux驱动学习笔记:异步IO

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

    Java NIO编程理论基础之Java IOlinux网络IO模型发展

    Java NIO编程理论基础篇——Java IO的发展以及linux网络IO模型
    发表于 07-18 12:40

    浅析java的IO模型

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

    linux下的IO模型详解

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

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

    PPT分享: Linux铁三角之IO()—— IO模型
    发表于 06-12 15:52

    Linux文件系统与IO流程和模型

    今晚9点: 《Linux文件系统与IO流程和模型》微课(415-418)
    发表于 06-13 16:51

    解读HEVC视频标准的环内滤波,看完你就懂了

    解读HEVC视频标准的环内滤波,看完你就懂了
    发表于 06-03 06:08

    详细了解五IO模型

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

    详解linux的分页模型

    linux下的逻辑地址=线性地址。也就是,我们编码使用的是线性地址,之后只需要经过个分页机制就可以把这个地址转为物理地址了。所以我们更重要的可能是去说明linux的分页
    的头像 发表于 05-18 08:59 2093次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>详解<b class='flag-5'>linux</b>的分页<b class='flag-5'>模型</b>

    Linux5IO模型

    通过 I/O 复用函数向内核注册组事件,内核通过 I/O 复用函数把其中就绪的事件通知给应用程序。
    的头像 发表于 08-12 09:22 1013次阅读

    网络IO模型:阻塞与非阻塞

    阻塞 IO 模型Linux ,默认情况下所有的 socket 都是阻塞的,个典型的读操作流程如图所示。 阻塞和非阻塞的概念描述的是用户线程调用内核
    的头像 发表于 10-08 17:16 831次阅读
    网络<b class='flag-5'>IO</b><b class='flag-5'>模型</b>:阻塞与非阻塞

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

    多路 IO 复用模型 多路 IO 复用,有时也称为事件驱动 IO。它的基本原理就是有个函数会不断地轮询所负责的所有 socket ,当某个 socket有数据到达了,就通知用户进程。
    的头像 发表于 10-08 17:21 766次阅读
    多路<b class='flag-5'>IO</b>复用<b class='flag-5'>模型</b>和异步<b class='flag-5'>IO</b><b class='flag-5'>模型</b>介绍

    linux异步io框架iouring应用

    Linux内核5.1支持了新的异步IO框架iouring,由Block IO大神也即Fio作者Jens Axboe开发,意在提供套公用的网络和磁盘异步
    的头像 发表于 11-08 15:39 655次阅读
    <b class='flag-5'>linux</b>异步<b class='flag-5'>io</b>框架iouring应用

    解读GNSS信号对网络中授时应用的益处

    涨知识 | 解读GNSS信号对网络中授时应用的益处
    的头像 发表于 11-24 14:26 500次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>解读</b>GNSS信号对网络中授时应用的益处