IO模型

作者: 夏虫亦可语冰 | 来源:发表于2022-08-20 16:11 被阅读0次

阻塞IO

我们知道在调用某个函数的时候无非就是两种情况,要么马上返回,然后根据返回值进行接下来的业务处理。当在使用阻塞IO的时候,应用程序会被无情的挂起,等待内核完成操作,因为此时的内核可能将CPU时间切换到了其他需要的进程中,在我们的应用程序看来感觉被卡主(阻塞)了。

image.png

非阻塞IO

当使用非阻塞函数的时候,和阻塞IO类比,内核会立即返回,返回后获得足够的CPU时间继续做其他的事情。

image.png

IO复用模型

当等待标准输入的时候,如果此时套接字有数据但不能读出。IO多路复用意味着可以将标准输入、套接字等都当做IO的一路,任何一路IO有事件发生,都将通知相应的应用程序去处理相应的IO事件,在我们看来就反复同时可以处理多个事情。这就是IO复用。

image.png

信号驱动IO

在信号驱动式 I/O 模型中,应用程序使用套接口进行信号驱动 I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个 SIGIO 信号,可以在信号处理函数中调用 I/O 操作函数处理数据。

image.png

优点:

  • 当有事件触发的时候, 由内核通过发送信号的方式主动通知进程

  • 不需要由用户进程复制fd数组到内核

缺点:

  • 只支持边缘触发

  • 信号处理不好可能会导致进程出问题.

异步IO

用程序告知内核启动某个操作,并让内核在整个操作(包括将数据从内核拷贝到应用程序的缓冲区)完成后通知应用程序。

同步与异步

对于发生一次网络IO,可以分为两部分:

1、等待数据:

阻塞:线程挂起,等待内核完成操作。

非阻塞:马上返回,无论是否完成。

2、将数据从内核复制到用户空间:

同步:线程自己把数据从内核复制到用户空间,期间不能做其它事情,一直等待数据复制完毕。

异步:系统内核把数据从内核复制到用户空间,然后再通知相应线程进行数据处理。

总结:
阻塞/非阻塞:发生请求后,是否等待接收方处理好数据(是否等待数据处理好)。

同步/异步: 线程是否需要等待数据从内核复制到用户空间(是否等待数据复制)。

相关文章

  • 1.Nette入门第一章——IO演进

    1. IO 基础 1.1. linux网络IO模型 阻塞IO模型 非阻塞IO模型 IO多路复用模型(NIO) 信...

  • 细谈Select,Poll,Epoll

    阻塞 io 模型 blocking IO非阻塞 io 模型 nonblocking IOio多路复用模型 IO m...

  • 2.五种IO模型

    0.IO介绍1.阻塞IO模型2.非阻塞IO模型3.IO多路复用模型4.信号驱动IO模型5.异步IO模型6.五种IO...

  • 网络IO模型

    网络IO的模型大致包括下面几种 同步模型(synchronous IO)阻塞IO(bloking IO)非阻塞IO...

  • 「基础知识总结」 IO模型

    IO模型 五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个被称为同步IO...

  • 五种 IO 模型

    五种 IO 模型 参考链接 一共有五种 IO 模型 阻塞 IO 非阻塞 IO 多路复用 IO 信号驱动 IO 异步...

  • Java中的IO模型

    Java中的IO模型 Java中的IO模型有四种: 同步阻塞IO 同步非阻塞IO IO多路复用 异步IO 其中IO...

  • 23、pythonIO模型

    python之路——IO模型 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 ...

  • IO模型

    IO模型 五种模型

  • 2018-07-03

    Netty实践与NIO原理 一、阻塞IO与非阻塞IO Linux网络IO模型(5种) (1)阻塞IO模型 所有文件...

网友评论

      本文标题:IO模型

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