美文网首页
五种I/O模型

五种I/O模型

作者: L木乃伊 | 来源:发表于2018-06-29 08:42 被阅读0次

    一:概念的理解:
    首先在网络编程的时候:常说的 同步/异步,阻塞/非阻塞四种调用方式:
    1、同步/异步主要针对C端(client)
    同步:同步就是C端发出一个功能调用的时候,在没有返回结果之前,该调用不返回,也就是说必须一件一件事做,等前一件事完了之后才做后一件事。
    如:普通的B/S模式:提交请求-》等待处理-》处理完毕返回,这期间客户端浏览器不能干任何事。
    异步:当C端一个异步过程调用发出之后,调用者不能立即得到结果,实际处理这个调用部件在完成后,通过状态、通知和回调来通知调用者。
    2、阻塞和非阻塞主要针对S端(server)
    阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。
    阻塞的例子:比如去取A楼一层(假设是内核缓冲区)取快递,但是比不知道什么时候来,你有不能干别的事情,只能死等着但是可以睡觉(进程处于休眠状态),因为你知道快递把货送来时一定会给你打电话
    非阻塞: 非阻塞与阻塞概念想对应,指在不能立即得到结果之前,该函数不会阻塞当前线程,而会立即返回。
    非阻塞的例子:还是等快递,如果用轮询的方式,每隔5分钟去A楼一层(内核缓冲区)去看快递来了没,没来,立即返回,如果快递来了,就放到A楼一层,等你去取。

    对于select:
    1:同步 ,我客户端(C端调用者)一个功能,该功能没有结束前,我死等结果。
    2:异步,我(c端调用者)调用一个功能,不知道该功能结果,该功能有结果后通知我,即回调通知。
    同步和异步主要针对c端,但是跟s端不是完全没关系,同步和异步必须s端配合才能实现,同步和异步由c端控制,但是s端是否为阻塞还是非阻塞,c端不关心。
    3:阻塞,就是调用我(s端被调用者,函数),我(s端被调用者,函数)没有完全接受完数据或者没有得到结果之前,我不会返回。
    4:非阻塞,就是调用我(s端被调用者,函数),我(s端被调用者,函数)立即返回,通过select通知调用者。
    二:同步I/O和异步I/O
    同步I/O与异步I/O的区别在与数据访问的时候进程是否阻塞
    阻塞I/O与非阻塞I/O的区别在与:应该程序的调用是否立即返回。
    阻塞和非阻塞是指server端的进程访问的数据如果尚未就绪,进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时时直接返回还是等待就绪。
    就同步和异步是指client端访问数据的机制,同步一般指主动请求并等待I/O操作完毕的方式,当数据就绪后再读写额时候必须阻塞,异步则指主动请求数据后便可以继续处理其他任务,随后等待I/O,操作完毕的通知。
    三:五种I/O模型:
    1、阻塞I/O
    2、非阻塞I/O
    3、I/O复用(select和poll)
    4、信号驱动I/O(SIGIO)
    5、异步I/O


    阻塞I/O模型:
    简介:进程会一直阻塞,直到数据拷贝完成
    应用程序调用一个I/O函数,导致应用程序阻塞,等待数据准备好,如果数据没有准备好,一直等待。。数据准备好,从内核拷贝到用户空间,I/O函数返回成功

    阻塞I/O模型图:在调用recv()/recvfrom()函数,发生在内核中等待数据和复制数据过程。

    阻塞I/O模型

    非阻塞I/O模型: 我们把一个套接口设置为非阻塞就是告诉内存,当所请求的I/O操作无法完成时,不要惊进程睡眠,而是返回一个错误,阻塞I/O函数会不断的测试数据是否准备好,没有准备好,继续测试,直到数据准备好为止。在测试的过程中会占用大量的CPU时间。


    image.png

    I/O复用模型:
    简介:主要是select和epoll;对于一个I/O端口,两次调用,两次返回,比阻塞I/O并没有什么优势,只是能实现同时对多个I/O端口进行监听。
    I/O复用模型会调用select,poll函数,这几个函数也会使进程阻塞,但是和阻塞I/O不同的,这个函数可以同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。

    image.png

    信号驱动I/O
    简介:两次调用,两次返回
    首先允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。昂数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

    image.png

    异步I/O模型:
    简介:数据拷贝的时候进程无需阻塞
    当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态,通知和回调通知调用者输入输出操作。

    image.png

    原文:https://blog.csdn.net/f2016913/article/details/77850683

    相关文章

      网友评论

          本文标题:五种I/O模型

          本文链接:https://www.haomeiwen.com/subject/hoibyftx.html