美文网首页
五种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

相关文章

  • Linux I/O模型的前世今生

    Linux I/O模型 阻塞式I/O模型 非阻塞式I/O模型 I/O复用式模型 信号驱动式I/O模型 异步I/O模...

  • netty

    I/O 模型 阻塞I/O模型(BIO) 非阻塞I/O模型 I/O复用模型(select/poll;epoll)se...

  • 最近面试的几个问题 (三) io 多路复用

    五种IO模型 1.阻塞I/O模型 2.非阻塞I/O模型 3.I/O复用模型 4.信号驱动I/O模型 5.异步I/O...

  • Socket

    一、I/O 模型阻塞式 I/O非阻塞式 I/OI/O 复用信号驱动 I/O异步 I/O五大 I/O 模型比较 二、...

  • Unix网络编程-I/O模型

    1. I/O 模型 Unix下可用的5种I/O模型: 阻塞式I/O; 非阻塞式I/O; I/O复用(select ...

  • Linux网络编程中的5种I/O模型

    1. 阻塞I/O模型 2. 非阻塞I/O模型 3. 阻塞的I/O复用模型 4. 信号驱动的I/O复用模型 5. 异...

  • Java NIO之Reactor和Preactor模型

    1、基础I/O模型 在《UNIX网络编程》中介绍了5中I/O模型:阻塞I/O、非阻塞I/O、I/O复用、SIGIO...

  • unix网络编程I/O模型分类

    1.阻塞I/O模型(Blocking I/O): 2.非阻塞模式(Non blocking I/O) 3.复用模型...

  • Linux中的IO模型

    Linux五种IO模型 blocking I/O nonblocking I/O I/O multiplexing...

  • redis多路 I/O 复用

    多路 I/O 复用模型 多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O...

网友评论

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

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