unix网络io模型 - CSDN
  • Unix网络编程中常用的IO模型有四种,分别为 Blocking IO - 阻塞IO NoneBlocking IO - 非阻塞IO IO multiplexing - IO多路复用 asynchronous IO - 异步IO 网络IO,是application的进程发起一个请求,在kernel内核中...

    Unix网络编程中常用的IO模型有四种,分别为

    • Blocking IO - 阻塞IO
    • NoneBlocking IO - 非阻塞IO
    • IO multiplexing - IO多路复用
    • asynchronous IO - 异步IO

    网络IO,是application的进程发起一个请求,在kernel内核中组织好数据。当数据准备好后,kernel将数据从系统缓冲区复制到用户空间,application才能继续处理。

    Blocking IO - 阻塞IO

    在linux中,默认情况下所有的socket都是blocking。
    kernel在准备数据的阶段,用户进程被阻塞。等kernel返回结果,用户进程才解除block的状态,重新运行。

    NoneBlockingIO - 非阻塞IO

    当用户进程发出系统调用后,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个结果(no datagram ready)。用户进程得知数据还没有准备好后,它可以每隔一段时间再次发送请求。当kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回。

    IO multiplexing - IO多路复用

    多路复用可以等待多个数据就绪,相当于一个代理,可代理多个请求。用户进程请求代理之后,进程被代理阻塞,此时代理会监听kernel的状态,如果其中一个进程需要的数据就绪就返回。

    asynchronous IO - 异步IO

    用户进程发起的请求,会通知内核进行操作,并将数据拷贝至进程中。完成之后,再通知进程整个操作全部完成(绑定一个回调函数处理数据)。

    展开全文
  • Linux下五种网络IO模型

    2019-05-24 16:45:03
    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, asynchronous IO的基本原理,更好的理解在高级语言中的异步编程,一起来看看吧,希望对大家...

     

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, asynchronous IO的基本原理,更好的理解在高级语言中的异步编程,一起来看看吧,希望对大家学习linux有所帮助。

      写在前面

      为了更好的理解下面提到的Linux下5种网络IO的概念,我们还是有必要先理清几个概念。

      1.程序空间与内核空间

      在Linux中,对于一次读取IO的操作,数据并不会直接拷贝到程序的程序缓冲区。它首先会被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的缓冲区。p.s: 最后一句话非常重要,重复一遍。

      1. Waiting for the data to be ready(等待数据到达内核缓冲区)

      2.Copying the data from the kernel to the process(从内核缓冲区拷贝数据到程序缓冲区)

      2.阻塞与非阻塞

      阻塞就是说我们某一个请求不能立即得到返回应答,否则就可以理解为非阻塞。

      3.同步IO与异步IO

      这里先直接引用Stevens(POSIX)在Unix网络编程中的定义:

      A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes. An asynchronous I/O operation does not cause the requesting process to be blocked.

      对于同步与异步,我们可以用一个简单的生活场景来描述。当我们排队在实体店买东西可以视作同步,而网购则可以视作异步。实体店排队这种同步情形显然是非常的浪费时间,等待的这段时间我们被阻塞住了不能干其他的事情,而网购只要我们提交一下订单之后其他什么都不用管了,商品到了,快递员给我们发送一个信号(打电话)我们直接到门口去拿,等待的这段时间我们可以用来撸代码。

      p.s: 等你阅读完文章的后面部分,回过头来看异步其实就是将等待的这段时间去处理IO操作,把CPU(我们的大脑)让出来做其他更有价值的事情(撸代码),而不是像同步那样去傻傻地排队。更加详细准确的定义可以在阅读完本文后面部分后参考维基百科。

      4.文件描述符

      在Linux下面一切皆文件, 文件描述符(file descriptor)是内核为文件所创建的索引 ,所有I/O操作都通过调用文件描述符(索引)来执行,包括下面我们要提到的socket。Linux刚启动的时候会自动设置0是标准输入,1是标准输出,2是标准错误。

      5种网络IO模型

      1.blocking IO(阻塞IO)

      如图所示,进程调用一个recvfrom请求,但是它不能立刻收到回复,直到数据返回,然后将数据从内核空间复制到程序空间。这里我们再次回顾开篇提到的两个过程:

      1.Waiting for the data to be ready(等待数据到达内核缓冲区)

      2.Copying the data from the kernel to the process(从内核缓冲区拷贝数据到程序缓冲区)

      注意到没有,在上面这两个过程中,进程都处于blocked(阻塞)状态,在等待数据返回的过程中不能空闲出来干其他的事情。

    2.nonblocking IO(非阻塞IO)

      当我们设置一个socket为nonblocking(非阻塞),相当于告诉内核当我们请求的IO操作不能立即得到返回结果,不要把进程设置为sleep状态,而是返回一个错误信息(下图中的EWOULDBLOCK)。

    我们来分析一下图片中的整个流程。前三次我们调用recvfrom请求,但是并没有数据返回,所以内核只能返回一个错误信息(EWOULDBLOCK)。但是当我们第四次调用recvfrom,数据已经准备好了,然后将它从内核空间复制到程序空间。

      在非阻塞状态下,我们的过程一(wait for data)并不是完全的阻塞的,但是过程二(copy data from kernel to user)依然处于一个阻塞状态。

      3.IO multiplexing(IO复用)

      IO复用的好处是我们可以通过(select/poll/epoll)一个时刻处理多个文件描述符,这里以select为例来分析一下。

     

    IO复用实际上也是完全阻塞的,请仔细看图(图中我们有两个return,前面我们都只有一个return),Stevens在书中提到这里并没有阻塞在recfrom阶段而是阻塞在select阶段,其实这样说并不是非常的严谨,因为recform其实也是一个阻塞过程(图中也描述了),recvfrom过程中进程除了等待copy data from kernel to user以外,并不能空闲出来干其他事情。

      两个过程的都是阻塞的,看起来IO复用和阻塞IO相比似乎并没有什么优势,而且还需要两个return,但是这里注意在IO复用中我们可以同时监听多个文件描述符。

      4.signal driven IO(信号驱动IO)

      我们也可以使用信号驱动IO,要求内核通知我们当文件描述符准备就绪以后发送相应的信号。

    我们根据图片来分析一下。 阶段1: 我们首先设置socket为一个信号驱动IO,并且通过sigaction system call安装一个signal handler,注意这个过程是瞬时的,所以这个阶段是非阻塞的。 阶段2 : 当数据已经准备好了以后,一个SIGIO信号传送给我们的进程告诉我们数据准备好了,然后进程开始等待数据从内核空间复制到程序空间(copy data from kernel to user),这个过程是阻塞的,因为我们的进程只能等待数据复制完毕。

      5.asynchronous IO(异步IO)

      我们来看一下异步的概念,异步就是说对于上面两个步骤(wait for data 和copy of the data from the kernel to our buffer)当它们完成的时候会自动通知进程,在这段时间里面进程什么都不用操心,就像网购一样,下了单什么也不用管了等着快递员通知我们(即我们通常所说的callback)。 相比前面的信号驱动IO,异步IO两个阶段都是非阻塞的。

      6.小结

    阻塞式IO(默认),非阻塞式IO(nonblock),IO复用(select/poll/epoll),signal driven IO(信号驱动IO)都是属于同步型IO,因为在第二个阶段: 从内核空间拷贝数据到程序空间的时候不能干别的事。只有异步I/O模型(AIO)才是符合我们上面对于异步型IO操作的含义,在1.wait for data,2.copy data from kernel to user,这两个等待/接收数据的时间段内进程可以干其他的事情,只要等着被通知就可以了。

    展开全文
  • 1. Unix/Linux操作系统简述 Unix操作与Linux系统结构图解 (引用计算机操作系统书籍) 概要说明 用户空间: 姑且将上述用户级别或者是unix编程的应用程序的部分称为用户空间,我们可以通过启动进程来调用内核来...
    1. Unix/Linux操作系统简述

    Unix操作与Linux系统结构图解 (引用计算机操作系统书籍)

    在这里插入图片描述
    在这里插入图片描述

    概要说明

    • 用户空间: 姑且将上述用户级别或者是unix编程的应用程序的部分称为用户空间,我们可以通过启动进程来调用内核来完成从硬件设备读取或写入等操作
    • 系统内核: 是直接与计算机硬件打交道的应用程序级别,在计算机相关的书籍中也称为操作系统,可以通过操作系统级别提供的一些组件来帮助用户进程与计算机硬件完成通信交互的操作,可以称为一个中转站

    文件描述符(File descriptor)

    在linux/unix系统中,文件进程存储着一份文件描述表(数组存储),数组存储file结构指针类型,文件进程通过数组索引来完成文件的操作,这里的数组索引也就是文件描述符,简称为fd

    至此,有了上述的认知之后,我们再来看下Unix的IO模型是如何进行网络数据的传输

    2. Unix之IO模型

    首先,讲述IO模型之前,需要先明确一个概念,比如我们现在需要从网络读取数据,那么流程将是先从用户进程中向系统内核发起读取数据的操作,然后等待内核接收到网络传输过来的数据报,有了数据报之后,根据上述操作系统的结构可知,我们需要将数据报通过系统内核复制到用户空间上,这个时候用户进程才能够获取到数据进行数据报的读取,由此可知,一个输入操作需要两个阶段:

    • 等待数据报可达,也就是系统内核必须要有接收到数据报
    • 有了数据报之后,需要将数据报从内核复制到用户空间

    另外

    • unix用recvfrom函数表示应用进程向系统内核发起读取操作的系统调用

    至此,网络IO读取操作有了上述的认知,接下来再看IO模式,注意默认情况下所有的套接字,即socket都是阻塞式的,以网络读取数据为例展开,为了简化概念,将TCP的低套接字等信息隐藏不做说明,只说明IO模型,或者可以简单理解为UDP传输方式

    阻塞式IO模型

    • 自应用进程发起recvfrom系统调用,在此期间一直处于被阻塞,因为这个时候需要等待内核获取数据报信息并将数据报复制到用户空间中,除非被中断异常返回,否则将一直处于阻塞状态
    • 以下是时序图展示阻塞式IO
      在这里插入图片描述

    非阻塞式IO模型

    • 非阻塞式主要体现在用户进程发起recvfrom系统调用的时候,这个时候系统内核还没有接收到数据报,直接返回错误给用户进程,告诉“当前还没有数据报可达,晚点再来”
    • 用户进程接收到信息,但是用户进程不知道什么时候数据报可达,于是就开始不断轮询(polling)向系统内核发起recvfrom的系统调用“询问数据来了没”,如果没有则继续返回错误
    • 用户进程轮询发起recvfrom系统调用直至数据报可达,这个时候需要等待系统内核复制数据报到用户进程的缓冲区,复制完成之后将返回成功提示
    • 以下时序图展示NIO的方式
      在这里插入图片描述

    IO复用模型

    • IO复用模式是使用select或者poll函数向系统内核发起调用,阻塞在这两个系统函数调用,而不是真正阻塞于实际的IO操作(recvfrom调用才是实际阻塞IO操作的系统调用)
    • 阻塞于select函数的调用,等待数据报套接字变为可读状态
    • 当select套接字返回可读状态的时候,就可以发起recvfrom调用把数据报复制到用户空间的缓冲区
    • IO复用模式时序图如下
      在这里插入图片描述

    信号驱动式IO模型

    • 用户进程可以使用信号方式,当系统内核描述符就绪时将会发送SIGNO给到用户空间,这个时候再发起recvfrom的系统调用等待返回成功提示,流程如下
    • 先开启套接字的信号IO驱动功能,并通过一个内置安装信号处理函数的signaction系统调用,当发起调用之后将会直接返回
    • 其次,等待内核从网络中接收数据报之后,向用户空间发送当前数据可达的信号给到信号处理函数
    • 信号处理函数接收到信息就发起recvfrom系统调用等待内核复制数据报到用户空间的缓冲区
    • 接收到复制完成的返回成功提示之后,应用进程就可以开始从网络中读取数据
    • 时序图如下
      在这里插入图片描述

    异步IO模型

    • 由POSIX规范定义,告知系统内核启动某个操作,并让内核在整个操作包括数据等待以及数据复制过程的完成之后通知用户进程数据已经准备完成,可以进行读取数据
    • 与上述的信号IO模型区分在于异步是通知我们何时IO操作完成,而信号IO是通知我们何时可以启动一个IO操作
    • 时序图如下
      在这里插入图片描述
    • 现代计算机服务器操作系统大部分都是基于linxu实现,为处理高并发而采取NIO的模型,对于支持异步IO模型的系统持有不确定因素
    3. 同步与异步和阻塞与非阻塞

    同步与异步的定义

    • 同步:发起一个fn的调用,需要等待调用结果返回,该调用结果要么是期望的结果要么是异常抛出的结果,可以说是原子性操作(要么成功要么失败返回)
    • 异步: 发起一个fn调用,无需等待结果就直接返回,只有当被调用者执行处理程序之后通过“唤醒”手段通知调用方获取结果(唤醒的方式有回调,事件通知等)
    • 小结: 同步和异步关注的是程序之间的通信

    阻塞与非阻塞的定义

    • 阻塞: 类比线程阻塞来说明,在并发多线程争抢资源的竞态条件下,如果有一个线程已持有锁,那么当前线程将无法获取锁而被挂起,处于等待状态
    • 非阻塞: 一旦线程释放锁,其他线程将会进入就绪状态,具备争抢锁的资格
    • 小结: 阻塞与非阻塞更关注是程序等待结果的状态
    • 由此可知,同步异步与阻塞非阻塞之间不存在关联,关注的目标是不一样的

    同步IO与异步IO(基于POSIX规范)

    • 同步IO: 表示应用进程发起真实的IO操作请求(recvfrom)导致进程一直处于等待状态,这时候进程被阻塞,直到IO操作完成返回成功提示
    • 异步IO: 表示应用进程发起真实的IO操作请求(recvfrom)导致进程将直接返回一个错误信息,“相当于告诉进程还没有处理好,好了会通知你”
    • 阻塞IO: 主要是体现发起IO操作请求通知内核并且内核接收到信号之后如果让进程等待,那么就是阻塞
    • 非阻塞IO: 发起IO操作请求的时候不论结果直接告诉进程“不用等待,晚点再来”,那就是非阻塞

    IO模型对比

    在这里插入图片描述

    • 根基上述的同步与异步IO定义并结合上述的模型可知,只有异步IO模型符合POSIX规范的异步IO,其他IO模型都存在recvfrom系统调用被内核阻塞,属于同步IO操作

    • 由此可知,阻塞IO与非阻塞IO可总结如下:

    • 也就是说,要么称为同步与异步IO,要么称为上述5种模型的IO说法,注意上述的同步与异步的概念

    • 大部分操作系统都是基于同步IO的方式实现,对于支持异步IO模型的操作系统还不确定,在实际工作我们经常会说Blocking-IO(阻塞IO)和Non-Blocking-IO(非阻塞IO),极少称同步IO与异步IO

    • 小结: 同步与异步针对通信机制,阻塞与非阻塞针对程序调用等待结果的状态

    展开全文
  • 阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了. 后来仔细读了一遍《UNIX 网络编程卷一 套接字联网 API(第三...

    出处

    阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了. 后来仔细读了一遍《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节, 终于把这些名词搞懂了.

    下面我以《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节的内容为准, 整理了一下各种网络 IO 模型具体定义以及一些容易混淆的地方.

    简介

    • Unix 下有 5 种可用的 IO 模型, 分别是:
    • 阻塞式 I/O
    • 非阻塞式 I/O
    • I/O 复用(select 和 poll)
    • 信号驱动式 I/O (SIGIO)
    • 异步 I/O (POSIX 的 aio_系列函数)

    阻塞式 I/O 模型

    最流行的 IO 操作是阻塞式 IO(Blocking IO). 以 UDP 数据报套接字为例, 下图是其阻塞 IO 的调用过程:

    在上图中, 进程调用 recvfrom, 其系统调用直到数据报返回并且被复制到应用进程的缓冲区中 或者发送错误时才返回. 因此进程在调用 recvfrom 开始到它返回的整段时间内都是被阻塞的.

    非阻塞式 IO(Non-Blocking IO)

    进程把一个套接字设置为非阻塞是在通知内核: 当调用线程所请求的 IO 操作需要调用线程休眠来等待操作完成时, 此时不要将调用线程休眠, 而是返回一个错误.

    如上图所示, 前三次调用 recvfrom 时, 没有数据可返回, 因此内核转而立即返回一个 EWOULDBLOCK 错误. 第四次调用 recvfrom 时, 已经有数据了, 此时, recvfrom 会阻塞住, 等待内核将数据赋值到应用进程的缓冲区中, 然后再返回.(注意, 当有数据时, recvfrom 是阻塞的, 它会等待内核将数据复制到应用进程的缓冲区后, 才返回).

    当一个应用进程像这样对一个非阻塞描述符循环调用 recvfrom 时, 我们称之为轮询(polling). 应用进程持续轮询内核, 以查看某个操作是否完成, 这么做会消耗大量的 CPU 时间, 不过这种模型偶尔也会遇到, 通常是专门提供某一种功能的系统中才有.

    IO 复用模型

    有了 IO 复用(IO multiplexing), 我们就可以调用 select 或 poll, 阻塞在这两个系统调用中的某一个之上, 而不是阻塞在真正的 IO 系统调用上. 例如:

    如上图所示, 当调用了 select 后, select 会阻塞住, 等待数据报套接字变为可读. 当 select 返回套接字可读这一条件时, 我们就可以调用 recvfrom 把所读取的数据报复制到应用进程缓冲区.

    对比阻塞式 IO, IO 复用模型优势并不明显, 并且从使用方式来说, IO 复用模型还需要多调用一次 select, 因此从易用性上来说, 比阻塞式 IO 还略有不足. 不过 select 的杀手锏在于它可以监听多个文件描述符, 大大减小了阻塞线程的个数.

    信号驱动 IO 模型

    信号驱动模型如上图所示. 当文件描述符就绪时, 我们可以让内核以信号的方式通知我们.我们首先需要开启套接字的信号驱动式 IO 功能, 并通过 sigaction 系统调用安装一个信号处理函数. sigaction 系统调用是异步的, 它会立即返回. 当有数据时, 内核会给此进程发送一个 SIGIO 信号, 进而我们的信号处理函数就会被执行, 我们就可以在这个函数中调用 recvfrom 读取数据.

    异步 IO 模型

    异步 IO (asynchronous IO) 由 POSIX 规范定义, 在 POSIX 中定义了若干个异步 IO 的操作函数. 这个函数的工作原理是: 告知内核启动某个动作, 并让内核在整个操作(包括将数据从内核复制到应用进程缓冲区)完成后通知我们的应用进程.

    异步 IO 模型和信号驱动的 IO 模型的主要区别在于: 信号驱动 IO 是由内核通知我们何时可以启动一个 IO 操作, 而异步 IO 模型是由内核通知我们 IO 操作何时完成.

    异步 IO 模型的操作过程如图所示:

    当我们调用 aio_read 函数时(POSIX 异步 IO 函数以 aio_或 lio_ 开头), 给内核传递描述符, 缓冲区指针, 缓冲区大小(和 read 相同的三个参数) 和文件偏移(以 lseek 类似), 并告诉内核当整个操作完成时如何通知应用进程. 该系统调用立即返回, 而且在等待 IO 完成期间, 应用进程不被阻塞.

    各种 IO 模型的比较

    如图所示, 上述五中 IO 模型中, 前四种模型(阻塞 IO, 非阻塞 IO, IO 复用, 信号驱动 IO)的主要区别在于第一阶段, 因为他们的第二阶段是一样的: 在数据从内核复制到调用者的缓冲区期间, 进程阻塞于 recvfrom 调用. 而第五种, 即异步 IO 模型中, 两个阶段都不需要应用进程处理, 内核为我们处理好了数据的等待和数据的复制过程.

    关于同步 IO 和异步 IO

    根据 POSIX 定义:

    • A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes(导致请求进程阻塞, 直到 IO 操作完成).
    • An asynchronous I/O operation does not cause the requesting process to be blocked(不导致请求进程阻塞).

    根据上述定义, 我们的前四种模型: 阻塞 IO 模型, 非阻塞 IO 模型, IO 复用模型和信号驱动 IO 模型都是同步 IO 模型, 因为其中真正的 IO 操作(recvfrom 调用) 会阻塞进程(因为当有数据时, recvfrom 会阻塞等待内核将数据从内核空间复制到应用进程空间, 当赋值完成后, recvfrom 才返回.) 只有异步 IO 模型与 POSIX 定义的异步 IO 相匹配.

    总结

    在处理网络 IO 操作时, 阻塞和非阻塞 IO 都是同步 IO.只有调用了特殊的 API 才是异步 IO.

    因此网上常说的 "同步阻塞 IO", "同步非阻塞 IO" 其实就是阻塞 IO 模型和非阻塞 IO 模型, 因为阻塞 IO 和非阻塞 IO 模型都是同步的, 加了 "同步" 二字其实是多余了.网络上常说的 "异步非阻塞 IO" 其实就是异步 IO 模型.





    作者:yongshun
    来源:51CTO
    展开全文
  • Unix网络编程5种IO模型

    千次阅读 2018-05-24 20:15:39
    IO模型用一幅图表示所支持的I/O模型纵向维度是“阻塞(Blocking)”、“非阻塞(Non-blocking)”;横向维度是“同步”、“异步”。总结起来是四种模型 同步阻塞、同步非阻塞;异步阻塞、异步非阻塞 。《Unix网络...
  • 概述 Linux内核将所有外部设备都看做一个文件来操作。对该文件的读写操作会调用内核提供的系统命令, ...Unix、Linux提供五种 i/o 模型,分别如下: 阻塞i/o模型 最常用的I/O模型就是阻塞I/O模型。缺省情况下
  • 转载:Unix/Linux 网络 IO 模型简介 概述 Linux内核将所有外部设备都看做一个文件来操作。对该文件的读写操作会调用内核提供的系统命令, 返回一个fd(file descriptor)文件描述符。而对一个socket的读写也有相应...
  • UNIXIO模型分析

    2017-06-28 10:10:46
    UNIXIO模型分析对UNIX下的五种常见IO模型分析,帮助理解 IO操作的两个阶段以读数据操作为例: 1. 等待内核数据准备(数据拷贝到内核缓冲区) 2. 将数据从内核拷贝到用户空间IO模型UNIX下共有五种常见的IO模型...
  • unix网络编程------5种IO模型

    千次阅读 2013-09-26 22:08:38
    Unix下的5种I/O模型: 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(select/poll/epoll) 4. 信号驱动式(SIGIO) 5. 异步I/O(POSIX的aio_系列函数) 一个输入操作通常包括两个不同的阶段: (1)等待数据准备好 (2)...
  • 一:Unix下5种IO模型 二:他们之间的区别 一:Unix下5种IO模型 阻塞式IO 非阻塞式IO IO多路复用(select和poll) 信号驱动式IO(SIGIO) 异步IO 对于一个套接字上的输入操作,两个阶段: 1)等待数据从网络中...
  • UNIX下的5种IO模型

    2016-12-14 08:52:33
    套接字的IO操作,如recvfrom,分为两个阶段: (1)等待内核中的接收缓冲区中有数据可读。 (2)将接收缓冲区中的数据复制进应用缓冲区。 调用IO操作的进程阻塞不仅指接收缓冲区没有数据时阻塞,数据到达后,从接收...
  • Unix网络编程中的五种IO模型 Blocking IO - 阻塞IO NoneBlocking IO - 非阻塞IO IO multiplexing - IO多路复用 signal driven IO - 信号驱动IO asynchronous IO - 异步IO 摘录地址:...
  • Unix网络编程之IO模型

    2020-03-30 14:24:01
    首先,我们要了解IO模型先要知道在底层操作系统是通过哪些设备来实现数据的传输,其次要了解IO模型中哪些是发生阻塞调用操作,然后有了上述的基本认知之后,开始来了解IO模型是如何演进,最后通过IO模型的演进我们要辨别...
  • Unix网络IO模型1. 阻塞IO模型:2. 非阻塞IO模型I/O复用模型信号驱动式I/O异步IO模型 参考文章 https://www.zhihu.com/question/19732473 https://juejin.im/entry/5a72d7f36fb9a01ca8724e36 1. 烧水举例 用生活中最...
  • 网络编程--IO模型示例

    万次阅读 2012-05-10 14:53:17
    IO模型在Richard Stevens的《UNIX网络编程,第一卷》(程序猿必备!)一书中有非常详尽的描述,以下简要介绍,并给出代码示例。 另外比较好的总结性blog,推荐: 使用异步 I/O 大大提高应用程序的性能 IO - ...
  • 阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了. 后来仔细读了一遍《UNIX 网络编程卷一 套接字联网 API(第三...
  • 五种网络io模型

    千次阅读 2017-02-04 11:07:56
    由于最近再看nginx,其采用了优于apache的select网络io模型,所以稍微了解了下网络io的模型的基础知识。 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O ...
  • Unix 中的五种网络 I/O 模型

    千次阅读 2018-07-08 19:38:20
    网络 I/O 模型 https://blog.csdn.net/phunxm/article/details/73008713 简明网络I/O模型—同步异步阻塞非阻塞之惑 https://www.jianshu.com/p/55eb83d60ab1 Linux 网络 I/O 模型简介(图文) ...
  • 透彻 Linux (Unix) 五种 IO 模型

    千次阅读 2017-01-17 13:51:58
    IO模型   用一幅图表示所支持的I/O模型 纵向维度是“阻塞(Blocking)”、“非阻塞(Non-blocking)”;横向维度是“同步”、“异步”。总结起来是四种模型 同步阻塞、同步非阻塞;异步阻塞、异步非...
  • 1 网络IO模型介绍  服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:  (1)同步阻塞IO(Blocking IO):即传统的IO模型。  (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞...
1 2 3 4 5 ... 20
收藏数 33,294
精华内容 13,317
热门标签
关键字:

unix网络io模型