美文网首页
关于I/O模型的记录

关于I/O模型的记录

作者: 星期八我一定好好读书 | 来源:发表于2017-04-16 15:10 被阅读0次

I/O模型的种类

阻塞式I/O、非阻塞式I/O、I/O复用(select, poll)、信号驱动式I/O(SIGIO)、异步I/O

一个输入操作通常包括两个不同的阶段:

(1)等待数据准备好

(2)从内核向进程复制数据

  对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区.

1.阻塞式I/O模型

默认情况下,所有的套接字都是阻塞的。以数据报套接字为例,阻塞式I/O如下图所示。

阻塞式I/O模型

   进程从调用recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom成功返回后,应用进程开始处理数据。

2.非阻塞式I/O模型

进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成,不要把本进程投入睡眠,而是返回一个错误。(???怎么理解???)

非阻塞式I/O模型

当一个应用进程像这样对一个非阻塞描述符循环调用recvfrom时,我们称之为轮询(polling)。应用进程持续轮询内核,以查看某个操作是否就绪,这么做往往耗费大量的cpu时间。

3.I/O复用模型

有了I/O复用(I/O multiplexing),就可以使用select或poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。

I/O复用模型

比较阻塞式I/O模型与I/O复用模型,I/O复用看起来并没有显出什么优势,事实上由于使用select需要两个而不是单个系统调用,I/O复用还稍微有劣势。但是,使用select的优势在于我们可以等待多个描述符就绪。

注:与I/O复用密切相关的另一种I/O模型是在多线程中使用阻塞式I/O,这种模型与上述模型极为相似,但是它没有使用select阻塞在多个文件描述符上,而是,使用多线程(每个文件描述符一个线程),这样每个线程都可以自由的调用诸如recvfrom之类的阻塞式I/O系统调用了。

4.信号驱动式I/O模型

信号驱动式I/O模型

5.异步I/O模型

异步I/O模型

同步I/O与异步I/O对比

posix对这两个术语定义:

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

异步I/O操作:不导致请求线程阻塞。

5种I/O模型的比较

       根据上述定义,前四种模型——阻塞式I/O模型、非阻塞式I/O模型、I/O复用模型和信号驱动式I/O模型都是同步I/O模型,因为其中真正的I/O操作(recvfrom)将阻塞进程。只有异步I/O模型与POSIX定义的异步I/O相匹配。

注:摘抄自——UNIX网络编程卷一:套接字联网API(第三版)

相关文章

  • 关于I/O模型的记录

    I/O模型的种类 阻塞式I/O、非阻塞式I/O、I/O复用(select, poll)、信号驱动式I/O(SIGI...

  • 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...

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

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

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

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

  • Socket

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

  • 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.复用模型...

  • redis多路 I/O 复用

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

网友评论

      本文标题:关于I/O模型的记录

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