精华内容
下载资源
问答
  • 5种IO模型

    千次阅读 2016-11-02 23:43:19
    (1)阻塞I/O模型:最常用的I/O模型就是阻塞I/O模型,缺省情形下,所有文件操作都是阻塞的。我们以套接字接口为例来讲解此模型:在进程空间中调用revcfrom,其系统调用直到数据包到达且被复制到应用进程的缓存区中...
    (1)阻塞I/O模型:最常用的I/O模型就是阻塞I/O模型,缺省情形下,所有文件操作都是阻塞的。我们以套接字接口为例来讲解此模型:在进程空间中调用revcfrom,其系统调用直到数据包到达且被复制到应用进程的缓存区中或者发生错误时才返回,在此期间一直会等待,进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞的,因此被称为阻塞I/O模型,如图:
    

    (2)非阻塞I/O模型:recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,一般都对非阻塞I/O模型进行轮询检查这个状态,看内核是不是有数据到来,如图:

    (3)I/O复用模型:Linux提供select/poll,进程通过将一个或多个fd传递给select或者poll系统调用,阻塞在select操作上,这样select/poll可以帮我们侦测多个fd是否处于就绪状态。select/poll是顺序扫描fd是否就绪,而且支持的fd数量有限,因此它的使用受到了一些制约。Linux还提供了一个epoll系统调用,epoll使用基于事件驱动方式代替顺序扫描,因此性能更高。当有fd就绪时,立即回调函数rollback。如图:


    (4)信号驱动I/O模型:首先开启套接口信号驱动I/O功能,并通过系统调用sigaction执行一个信号处理函数(此系统调用立即返回,进程继续工作,它是非阻塞的)。当数据准备就绪时,就为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据,并通知主循环函数处理数据。如图:


    (5)异步I/O:告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓冲区)通知我们。这种模型与信号驱动模型的主要区别是:信号驱动I/O由内核通知我们何时可以开始一个I/O操作;异步I/O模型由内核通知我们I/O操作何时已经完成。如图:


    展开全文
  • 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    万次阅读 多人点赞 2016-10-28 20:01:41
    5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。本文是在《UNIX网络编程 卷1:套接字联网API》...

    5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

           看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境下的网络 IO环境下的理解,它里面给出的例子是读取(接收)网络UDP数据。下面简单写写自己对这些IO模型的理解。

    1、IO

           IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<-->内核空间、内核空间<-->设备空间(磁盘、网络等)IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。

           LINUX中进程无法直接操作I/O设备,其必须通过系统调用请求kernel来协助完成I/O动作;内核会为每个I/O设备维护一个缓冲区。

           对于一个输入操作来说,进程IO系统调用后,内核会先看缓冲区中有没有相应的缓存数据,没有的话再到设备中读取,因为设备IO一般速度较慢,需要等待;内核缓冲区有数据则直接复制到进程空间。

           所以,对于一个网络输入操作通常包括两个不同阶段:

    (1)等待网络数据到达网卡→读取到内核缓冲区,数据准备好;

    (2)从内核缓冲区复制数据到进程空间。

    2、5种IO模型

           《UNIX网络编程》说得很清楚,5种IO模型分别是阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型、异步IO模型;前4种为同步IO操作,只有异步IO模型是异步IO操作。下面这样些图,是它里面给出的例子:接收网络UDP数据的流程在IO模型下的分析,在它的基础上再加以简单描述,以区分这些IO模型。

    2-1、阻塞IO模型

           进程发起IO系统调用后,进程被阻塞,转到内核空间处理,整个IO处理完毕后返回进程。操作成功则进程获取到数据。

    1、典型应用:阻塞socket、Java BIO;

    2、特点:

    进程阻塞挂起不消耗CPU资源,及时响应每个操作

    实现难度低、开发应用较容易;

    适用并发量小的网络应用开发;

    不适用并发量大的应用:因为一个请求IO会阻塞进程,所以,得为每请求分配一个处理进程(线程)以及时响应,系统开销大。

    2-2、非阻塞IO模型

           进程发起IO系统调用后,如果内核缓冲区没有数据,需要到IO设备中读取,进程返回一个错误而不会被阻塞;进程发起IO系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。

           对于上面的阻塞IO模型来说,内核数据没准备好需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞。

    1、典型应用:socket是非阻塞的方式(设置为NONBLOCK)

    2、特点:

    进程轮询(重复)调用,消耗CPU的资源

    实现难度低、开发应用相对阻塞IO模式较难;

     适用并发量较小、且不需要及时响应的网络应用开发;

    2-3、IO复用模型

           多个的进程的IO可以注册到一个复用器(select)上,然后用一个进程调用该select, select会监听所有注册进来的IO;

           如果select没有监听的IO在内核缓冲区都没有可读数据,select调用进程会被阻塞;而当任一IO在内核缓冲区中有可数据时,select调用就会返回;

           而后select调用进程可以自己或通知另外的进程(注册进程)来再次发起读取IO,读取内核中准备好的数据。

           可以看到,多个进程注册IO后,只有另一个select调用进程被阻塞。

    1、典型应用:select、poll、epoll三种方案,nginx都可以选择使用这三个方案;Java NIO;

    2、特点:

    专一进程解决多个进程IO的阻塞问题,性能好Reactor模式;

    实现、开发应用难度较大;

    适用高并发服务应用开发:一个进程(线程)响应多个请求

    3、select、poll、epoll

    Linux中IO复用的实现方式主要有select、poll和epoll:

    Select:注册IO、阻塞扫描,监听的IO最大连接数不能多于FD_SIZE;

    Poll:原理和Select相似,没有数量限制,但IO数量大扫描线性性能下降;

    Epoll :事件驱动不阻塞,mmap实现内核与用户空间的消息传递,数量很大,Linux2.6后内核支持;

     2-4、信号驱动IO模型

           当进程发起一个IO操作,会向内核注册一个信号处理函数,然后进程返回不阻塞;当内核数据就绪时会发送一个信号给进程,进程便在信号处理函数中调用IO读取数据。

           1、特点:回调机制,实现、开发应用难度大;

    2-5、异步IO模型

           当进程发起一个IO操作,进程返回(不阻塞),但也不能返回果结;内核把整个IO处理完后,会通知进程结果。如果IO操作成功则进程直接获取到数据

    1、典型应用:JAVA7 AIO、高性能服务器应用

    2、特点:

    不阻塞,数据一步到位Proactor模式

    需要操作系统的底层支持,LINUX 2.5 版本内核首现,2.6 版本产品的内核标准特性;

    实现、开发应用难度大;

    非常适合高性能高并发应用;

    3、IO模型比较

    3-1、阻塞IO调用和非阻塞IO调用、阻塞IO模型和非阻塞IO模型

           注意这里的阻塞IO调用和非阻塞IO调用不是指阻塞IO模型和非阻塞IO模型:

                  阻塞IO调用 :在用户进程(线程)中调用执行的时候,进程会等待该IO操作,而使得其他操作无法执行。

                  非阻塞IO调用:在用户进程中调用执行的时候,无论成功与否,该IO操作会立即返回,之后进程可以进行其他操作(当然如果是读取到数据,一般就接着进行数据处理)。

           这个直接理解就好,进程(线程)IO调用会不会阻塞进程自己。所以这里两个概念是相对调用进程本身状态来讲的。

           从上面对比图片来说,阻塞IO模型是一个阻塞IO调用,而非阻塞IO模型是多个非阻塞IO调用+一个阻塞IO调用,因为多个IO检查会立即返回错误,不会阻塞进程。

           而上面也说过了,非阻塞IO模型对于阻塞IO模型来说区别就是,内核数据没准备好需要进程阻塞的时候,就返回一个错误,以使得进程不被阻塞。

    3-2、同步IO和异步IO

    同步IO:导致请求进程阻塞,直到I/O操作完成。

    异步IO:不导致请求进程阻塞。

           上面两个定义是《UNIX网络编程 卷1:套接字联网API》给出的。这不是很好理解,我们来扩展一下,先说说同步和异步,同步和异步关注的是双方的消息通信机制

                  同步:双方的动作是经过双方协调的,步调一致的。

                  异步:双方并不需要协调,都可以随意进行各自的操作。

           这里我们的双方是指,用户进程和IO设备;明确同步和异步之后,我们在上面网络输入操作例子的基础上,进行扩展定义:

                 同步IO用户进程发出IO调用,去获取IO设备数据,双方的数据要经过内核缓冲区同步,完全准备好后,再复制返回到用户进程。而复制返回到用户进程会导致请求进程阻塞,直到I/O操作完成。

                 异步IO用户进程发出IO调用,去获取IO设备数据,并不需要同步,内核直接复制到进程,整个过程不导致请求进程阻塞。

          所以, 阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型者为同步IO模型,只有异步IO模型是异步IO。

    展开全文
  • IO概念&5种IO模型介绍

    千次阅读 2017-07-05 18:41:13
    本文介绍了IO概念和5种IO模型,希望能以最轻松的方式让大家理解这两个知识 ٩(๑>◡<๑)۶ 开始啦。。。。。。。 ~tips:全文阅读需3min~Concept IO叫做输入输出,我们可以将IO理解为两步:等待IO事件就绪 数据...

    ForeWord


    本文介绍了IO概念和5种IO模型,希望能以最轻松的方式让大家理解这两个知识 ٩(๑>◡<๑)۶

    1

    开始啦。。。。。。。
    ~tips:全文阅读需3min~


    Concept


    IO叫做输入输出,我们可以将IO理解为两步:

    1. 等待IO事件就绪
    2. 数据就绪后进行真正意义上的IO(真正的数据搬迁)

    所以,IO的过程一是等,然后才是输入输出。

    进而,我们可以得到评价IO是否高效的标准:

           在IO过程中“等”的比重越小的性能越好,越大的性能越低。
    

    666

    IO中有两个重要的函数:read&write

    他们也有两个功能:
    1. 等
    2. 获取/写数据

    等就是不能读和写,也就是写/读条件不就绪,即发送/接收缓冲区没有被写满,所以读写事件是否就绪通常要与文件描述符相关。


    5种IO模型


    1. A Story

    先给大家讲一个钓鱼的故事٩(๑>◡<๑)۶

    2

    ~风和日丽的一天,张铁锤拿着鱼竿和小板凳,提着桶,来到小河边钓鱼。~

       他先给鱼竿上放好鱼饵,然后就坐在自己的小板凳上,眼睛一直瞪着鱼竿的尽头。等到鱼上钩后,自己收竿把鱼放在桶里。
    

    不一会,李狗蛋也来了。

       他也和王铁锤一样,上好鱼饵之后就等鱼上钩。但他的做法是一边玩手机,一边瞄着鱼竿是否有动静,还不时的和王铁锤搭讪,但王铁锤并不理他,因为他在一动不动的盯着鱼竿,不能分心。
    

    又过了一会,赵二毛也来凑热闹了,

       但他多拿了一样东西———铃铛,他把铃铛系在鱼竿上,然后坐在小板凳上,拿出了一本《C和指针》看起了书,这样铃铛一响就直接收竿。嗯,文化人就是不一样。
    

    今天钓鱼的人真不少,刘翠花也过来了,

       但她放了个大招,直接拿了100多只鱼竿,全固定在岸边。这样几乎不用等,水池边全是她收竿的身影。不一会儿,就钓了好几桶鱼。
    

    王老五看见这么多人钓鱼,顿时兴致也来了,但人家是老板,还有事要做。

       于是吩咐司机让他去钓鱼,钓到了鱼就打电话通知他。只能说,有钱人就是不一样。
    

    好了,我们的故事就讲到这里。

    其实,钓鱼的过程和IO非常类似,要先等鱼上钩,然后才真正开始钓鱼。所以,上边的5个人实际上就对应了5种IO模型。

    2. 5种IO模型

    用这种讲故事的方式来介绍5种IO模型还是太口语化了,还是让我们严肃一点吧 (。◕ˇ∀ˇ◕)

    1. 阻塞IO

    对于王铁锤,他一直看着鱼竿,自己等,自己钓,而且等的过程中不做其他的事。这就是阻塞IO:

         阻塞式等待IO事件,在等的过程中不能做其他事。
    

    2. 非阻塞IO

    对于李狗蛋,他也是自己等,自己钓。但他并不是一直盯着鱼竿,而是时刻检测钓鱼事件是否就绪,没有就做其他的事(玩手机、搭讪)。这就是非阻塞IO:

         非阻塞等待,不断检测IO事件是否就绪。没有就绪就可以做其他事。
    

    3. 信号驱动IO

    对于赵二毛,他将钓鱼事件是否就绪的信息转移到铃铛上,不用自己检测事件就绪,只需要将铃铛作为信号通知方式。这就是信号驱动IO:

         linux用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO时间就绪,进程收到SIGIO信号。然后处理IO事件。
    

    4. IO复用/多路转接IO
    对于刘翠花,她也是自己等,自己钓。但可以同时等待多个鱼上钩事件。这样她钓到鱼的概率就很大,等的时间短,效率明显比其他人高。这就是多路转接IO:

         linux用select/poll函数实现IO复用模型,这两个函数也会使进程阻塞,但是和阻塞IO所不同的是这两个函数可以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检测。知道有数据可读或可写时,才真正调用IO操作函数
    

    5. 异步IO
    对于王老五(老板),他并没有经过等的过程,只需要发起事件(让司机钓鱼),然后享受结果。这就是异步IO:

         linux中,可以调用aio_read函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序。
    

    3. 区别与联系

    前4种模型都有等和IO两个阶段,并将数据从内核拷贝到调用者的缓冲区,自己等,自己进行数据搬迁。所以统称为同步IO。 与第5种异步IO相区分。

       注:这里同步/异步的概念与进程&线程中的概念不同,不同的背景下应该有不同的理解。
    

    The End


    本文通过一个小故事介绍了5种IO模型,希望能让大家更好的理解这几种IO模型的概念和区别。

    告辞。。。

    213

    展开全文
  • 【Linux基础】Linux的5种IO模型详解

    千次阅读 2017-07-04 16:57:34
    引入为了更好的理解5种IO模型的区别,在介绍IO模型之前,我先介绍几个概念1.进程的切换(1)定义为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。即从用户态(较低的...

    引入

    为了更好的理解5种IO模型的区别,在介绍IO模型之前,我先介绍几个概念

    1.进程的切换

    (1)定义

    为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。即从用户态(较低的3G字节)切换到内核态(最高的1G字节),非常消耗系统资源。

    (2)过程

    • 保存处理机上下文,包括程序计数器和其他寄存器。
    • 更新PCB信息。
    • 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
    • 选择另一个进程执行,并更新其PCB。
    • 更新内存管理的数据结构。
    • 恢复处理机上下文。

    2.进程的阻塞

    (1)定义

    正在执行的进程,由于期待的某些事件未发生,由运行状态变为阻塞状态。

    (2)特点

    • 只有处于运行状态的进程(获得CPU)才能被阻塞
    • 阻塞是主动行为
    • 不占用CPU资源

    3.文件描述符

    (1) 定义

    用于描述指向文件的引用的抽象化概念

    (2) 特点

    • 一个非负整数
    • 本质是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表

    4.缓存IO

    • IO的数据缓存在文件系统的页缓存中(先拷贝到内核的缓冲区)

    • 在应用程序和内核间多次数据拷贝,带来很大的CPU开销

    5.并发与并行

    • 并发:同时进行的任务数

    • 并行:同时工作的物理资源数量(如CPU核数)

    5种IO模型

    • IO的本质是socket的读取,数据先拷贝到内核的缓冲区中,然后拷贝到应用程序的地址空间(进程)

    1.BIO(blocking IO):同步阻塞 I/O

    (1)过程

    这里写图片描述

    分析:从上图可以看到在整个过程中,当用户进程进行系统调用时,内核就开始了I/O的第一个阶段,准备数据到缓冲区中,当数据都准备完成后,则将数据从内核缓冲区中拷贝到用户进程的内存中,这时用户进程才解除block的状态重新运行。

    (2)实例

    • Blocking I/O是在I/O执行的两个阶段都被block了。

    • 例如:我要去饭堂吃饭,这时饭堂的人很多,我就得排队买饭,排队的时间被浪费了,

    (3)特点

    • 能够及时返回数据,无延迟
    • 性能下降

    2.NIO(nonblocking IO):同步非阻塞 I/O

    (1)过程

    这里写图片描述

    分析:从上图可以看到在I/O执行的两个阶段中,用户进程只有在第二个阶段被阻塞了,而第一个阶段没有阻塞,但是在第一个阶段中,用户进程需要盲等,不停的去轮询内核,看数据是否准备好了。

    (2)实例

    • nonblocking I/O是在I/O执行的第二个阶段(数据复制)被block了,而第一个阶段并未阻塞(数据准备)。

    • 例如:我要去饭堂吃饭,这时饭堂的人很多,一般来说我需要排队买饭,但我们饭堂的管理最近变的比较人性化,你点完饭后,会给你一个号码,但饭堂噪声很大,我不得不频繁的询问我的饭是否做好了,但是我可以利用之前排队的时间去买瓶饮料喝!

    (3)特点

    • 拷贝数据的整个过程,进程仍然是阻塞的
    • 需要不断询问数据是否准备好了
    • 能够在等待任务完成的过程中处理其他事件
    • 由于需要轮询,所以延迟会增加

    3.多路复用IO( IO multiplexing)

    (1)过程

    这里写图片描述

    分析:

    • 从上图可以看到在I/O复用模型中,由于同步非阻塞方式需要不断主动轮询,轮询占据了很大一部分过程,轮询会消耗大量的CPU时间,而 “后台” 可能有多个任务在同时进行,

    • 如果循环查询多个任务的完成状态,只要有任何一个任务完成,就去处理它。轮询不是进程的用户态。这时 “IO 多路复用”就出现了。即UNIX/Linux 的 select、poll、epoll,

    • IO多路复用是阻塞在select,epoll这样的系统调用之上,而没有阻塞在真正的I/O系统调用如recvfrom之上。

    • 从整个IO过程来看,他们都是顺序执行的,因此可以归为同步模型(synchronous)。都是进程主动等待且向内核检查状态

    (2)实例

    • 多路复用I/O执行的两个阶段用户进程都是阻塞的,但是两个阶段是独立的。

    • 例如:我要去饭堂吃饭,这时饭堂的人很多,点完饭后,我会拿到一个号码,以前我不得不频繁的询问我的饭做好了没,但是最近饭堂安装了一块电子显示屏,你的饭好了就会在屏上显示出来,这时候我就不用频繁的去问了,直接看电子显示屏就醒了,然后我就可以利用这个时间去超市买个牙膏了。

    (3)特点

    • select/poll调用后会阻塞进程,但可以同时阻塞多个IO事件操作(文件描述符),有数据可读或可写(就绪事件),就通知用户进程。

    • select 需要每次注册事件(轮询),而epoll不需要每次注册事件(没有轮询,回调函数)

    • IO多路复用阻塞在select/epoll的系统调用之上的,而真正的IO系统调用如recvfrom是非阻塞的。

    (4)适用场景

    • 服务器需要同时处理多个处于监听状态或连接状态的套接字

    • 服务器需要处理多种网络协议的套接字

    4.信号驱动I/O( signal driven IO)

    (1)过程

    这里写图片描述

    分析:从上图可以看出,只有在I/O执行的第二阶段阻塞了用户进程,而在第一阶段是没有阻塞的。该模型在I/O执行的第一阶段,当数据准备完成之后,会主动的通知用户进程数据已经准备完成,即对用户进程做一个回调。该通知分为两种,一为水平触发,即如果用户进程不响应则会一直发送通知,二为边缘触发,即只通知一次。

    (2)实例

    • 信号驱动I/O执行的第一阶段不阻塞,而第二阶段是阻塞的。

    • 例如:我要去饭堂吃饭,这时饭堂的人很多,点完饭后,我会拿到一个号码,虽然说饭堂安装了一块电子显示屏,但我在玩手机时还不得不抬头看一下显示屏上有我的号码没,最近饭堂买了一个大喇叭,哪个号码好了,卖饭的阿姨就会用喊,虽说饭堂有点吵,但这个声音还是可以听到的,这样我就可以专心的低头玩手机了。

    5.异步 I/O(asynchronous IO)

    (1)过程

    这里写图片描述

    分析:从上图可以看出,在该模型中,当用户进程发起系统调用后,立刻就可以开始去做其它的事情,然后直到I/O执行的两个阶段都完成之后,内核会给用户进程发送通知,告诉用户进程操作已经完成了。

    (2)实例

    • 异步 I/O执行的两个阶段都不会阻塞。

    • 例如:我要去饭堂吃饭,估计这会饭堂的人很多,但最近我们饭堂可以叫外卖了,这样就省事多了,我直接打个电话,订份饭送到我们宿舍,而我现在就可以利用原来去饭堂路上和等饭的时间写博客了。

    • 这就是同步和异步的区别,原来我得亲自去饭堂买饭,而现在我可以在宿舍叫外卖。

    (3)特点

    • 读写操作由内核完成,完成后内核将数据放到指定的缓冲区,通知应用程序来取。

    总结

    这里写图片描述

    • 阻塞IO和非阻塞IO的区别:数据准备的过程中,进程是否阻塞。

    • 同步IO和异步IO的区别:数据拷贝的过程中,进程是否阻塞。



    本人才疏学浅,若有错,请指出,谢谢! 如果你有更好的建议,可以留言我们一起讨论,共同进步! 衷心的感谢您能耐心的读完本篇博文!

    参考资料:聊聊Linux 五种IO模型

    展开全文
  • 5种IO模型5种通信模式

    万次阅读 2016-12-25 16:21:11
    操作系统的五通信模型
  • tcpio5种io模型

    千次阅读 2017-01-29 01:36:46
    阻塞IO, recv,接收数据,若没有,将阻塞, 当对方发数据来后,linux内核缓冲区得到数据, 内核数据复制到recv()调用所在的用户空间, 阻塞解除,进行下一步处理, 非阻塞IO,可以通过设置来实现, ...
  • Unix网络编程5种IO模型

    千次阅读 2017-10-23 20:49:25
    IO模型用一幅图表示所支持的I/O模型纵向维度是“阻塞(Blocking)”、“非阻塞(Non-blocking)”;横向维度是“同步”、“异步”。总结起来是四模型 同步阻塞、同步非阻塞;异步阻塞、异步非阻塞 。《Unix网络...
  • Unix 5种IO模型的图解分析和比较

    千次阅读 2010-08-20 13:29:00
    Unix 5种IO模型的图解分析和比较
  • Unix 5种IO模型的图解分析和比较

    千次阅读 2010-07-08 19:26:00
    Unix 5种IO模型的图解分析和比较(转自http://blog.csdn.net/blueboy2000/archive/2009/08/26/4485874.aspx)Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(select和poll)信号驱动I/O(SIGIO)异步I/O(Posix.1的...
  • 2、5种IO模型 《UNIX网络编程》说得很清楚,5种IO模型分别是阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型、异步IO模型;前4种为同步IO操作,只有异步IO模型是异步IO操作。 下面这样些图,是它里面给出...
  • 2. Linux下的五I/O模型 2.1 I/O发生时涉及的对象和阶段 2.2 阻塞I/O模型(blocking I/O)  2.3 非阻塞I/O模型(non-blocking IO) 2.4 I/O复用模型(I/O multiplexing) 2.5 信号驱动I/O模型(Signal-driven...
  • Select、poll、epoll本质上都是同步IO(Linux)。 Select:1.文件描述符个数有限制1024 --位图  2.每次调用都需要重新将3个fd集合从用户态拷贝到内核态  3.内核需要遍历所有fd,效率低 如果select返回可读,结果
  • 种IO模型详解

    万次阅读 多人点赞 2018-03-20 11:26:52
    下面就分别来介绍一下这5种IO模型的异同。1.阻塞IO模型 最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。 当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户...
  • Linux系统的五种IO模型

    多人点赞 2019-08-03 15:29:00
    在Linux系统中,共有5种IO模型,它们分别是:阻塞IO模型,非阻塞IO模型,信号驱动IO模型,多路复用IO模型和异步IO模型 执行IO操作的过程分为两个步骤:数据准备和数据拷贝 阻塞IO模型 进程或线程等待某个条件,...
  • 理解Linux五种IO模型是理解Java IO模型的基础,以钓鱼的例子为例,是否等待鱼上钩(数据准备)用来区分阻塞和非阻塞,是否手动将鱼捞出用来区分同步和异步(真正的读写操作),链接:...mid=2247484746&...
  • 种IO模型及设计模式

    千次阅读 2019-06-10 16:30:01
    下面就分别来介绍一下这5种IO模型的异同。 1.阻塞IO模型  最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。  当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪...
  • linux的五种IO模型

    千次阅读 2016-12-22 21:34:34
    现在Linux有5种IO模型 举例:网络中socket的一个read()是个一个IO操作命令,具体流程如下 应用程序调用read命令,通知内核读取数据 内核创建文件描述符 内核从物理层收到读指令,从网络中获取数据包 数据包传到TCP/IP层,...
  • Linux的五种IO模型(形象实例详解)

    千次阅读 2019-04-28 17:40:46
    二、Linux的5种IO模型 简介 1、阻塞IO模型(blocking I/O) 2、非阻塞IO模型(noblocking I/O) 3、信号驱动IO模型(signal blocking I/O) 4、IO复用模型(I/O multiplexing) 5、异步IO模型(asyn...
  • 【IO】IO模型:Linux下的五种IO模型

    千次阅读 2020-12-27 02:40:13
    Linux操作系统中,这就是一最简单的IO模型,即阻塞IO。一般表现为进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。 当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,...
  • Linux五种IO模型

    千次阅读 2016-04-14 00:56:23
    Linux五种IO模型 转载:http://blog.csdn.net/jay900323/article/details/18141217    Linux五种IO模型性能分析   目录(?)[-] 概念理解Linux下的五种IO模型 阻塞IO模型非阻塞IO模型 IO复用模型...
  • 种IO模型

    2021-01-22 15:42:36
    在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。 1、阻塞IO模型 最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。 当用户线程发出IO请求之后,...
  • 初识五种IO模型

    2018-07-16 21:59:42
    以下内容均为本人学习笔记,若有不当,感谢指出 在网络环境下将IO分为两步,第一步为等待,第二步...下面是人们为解决行IO效率提出的五种IO模型种IO模型 1.阻塞IO 在内核将数据准备好之前,系统调用会一...
  • 种IO模型详解及优缺点

    千次阅读 2020-07-23 12:05:55
    下面就分别来介绍一下这5种IO模型的异同。 1.阻塞IO模型 最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户...
  • 浅析IO,NIO和五IO模型 文章目录浅析IO,NIO和五IO模型一:几个基本的概念二:同步,异步,阻塞,非阻塞1.同步:2.异步:3.阻塞:4.非阻塞:注意:三:阻塞IO,...信号驱动IO模型5.异步IO模型注意: 为了便于cpu的...
  • Windows Socket五种IO模型

    2010-04-08 13:52:16
    Windows Socket五种IO模型
  • 主要介绍了Linux 下的五 IO 模型详细介绍的相关资料,需要的朋友可以参考下
  • 5种网络IO模型

    万次阅读 多人点赞 2015-04-10 10:39:07
    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 328,436
精华内容 131,374
关键字:

5种io模型