首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IO模型

UNIX下有5中I/O模型,分别是阻塞式、非阻塞式、IO复用、信号驱动式、异步IO。...阻塞式IO 一般最常用的是这种阻塞式IO,顾名思义,所有套接字都是阻塞的,比如读数据,如果没有数据可读,就会一直阻塞在这里。...IO多路复用模型 我们可以调用select或者poll函数,这样进程不会阻塞在真正的IO上,而是、一直在等待何时可以进行IO。 这种方式跟非阻塞式相比,有点相像。...各种模型对比 对比这几种模型,阻塞式IO就像你亲自去办一件事情,由于你去早了,所以需要等待一段时间。 非阻塞式IO是你每隔一会就打电话问一下,最后可以了,你就去把事情办了。...异步IO是,你把你想做的事打电话告诉别人,然后他就去做了,等他做完之后再通知你。 其中,前四都是同步IO模型,其中的IO操作都会阻塞进程。

22330

IO模型

本文分享的是理解五IO模型的基本概念, 重点是IO多路转接。 什么是IO 其实我们在读写数据的时候,比如使用了write、read、recv、send等等函数,本质是对数据的拷贝。...既然IO是等待+拷贝数据,那么高效IO的本质,就是需要减少等待在单位时间内的比重! 五IO模型概念 我将用钓鱼作为例子,通俗地介绍五IO模型是哪五。...阻塞IO:在内核将数据准备好之前, 系统调用会一直等待。所有的套接字, 默认都是阻塞方式。 阻塞IO是最常见的IO模型。 非阻塞IO 过一会儿,一个叫李四的人也来钓鱼了。...实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态。 在IO多路转接中,使用系统调用select来进行等待,使用recvfrom来进行拷贝数据。  以上四方法都属于同步IO。...就拿上述的五IO模型来讲,前四,不管是谁,起码都有等待或者把鱼钓上来这两个操作的其中之一,即参与了就属于同步。而在异步IO中,不管是等待还是执行操作,都没有参与。

14740
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    IO的内核原理与5IO模型

    、 这里的I/O指缓冲I/O; 根据UNIX网络编程对I/O模型的分类,UNIX提供了5I/O模型,分别如下。...这和前面的信号驱动式IO模型很容易混淆、需要理解IO交互并结合五IO模型的比较阅读 在异步IO模型中、真正实现了POSIX描述的异步IO、是五IO模型中唯一的异步模型 不阻塞、数据一步到位、Proactor...id=dido:public:stds:tech:ieee:posix 1.8 五I/O模型的比较 image.png 通过上面的图片,可以发现non-blocking IO和asynchronous...在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。 1.8.1 五I/O的区别 阻塞IO和非阻塞IO的区别在哪?...值得说明的是,用来克服select/poll缺点的方法不只有epoll,epoll只是一Linux的实现方案。

    1.8K53

    linux五IO模型

    linux五IO模型 同步和异步的区别: 同步和异步的区别 同步:程序从上往下执行 异步:程序从上往下执行会有多个分支共同执行(即开多个线程)。...linux五IO模型 阻塞式IO: 阻塞式IO图解 ?...recvfrom方法读取数据,当数据没有到达linux内核空间的时候一直阻塞,等数据拿到了之后再复制一份发送给用户空间,程序才会继续执行 非阻塞式IO 非阻塞式IO图解 ?...这样就不会导致阻塞,但是非常消耗CPU资源 阻塞式IO和非阻塞式IO,和悲观锁和乐观锁极其类似 复用IO(select,poll,expo) 之后会详细介绍,持续更新 信号驱动IO 事件驱动...之后再使用线程池支持多个请求共同执行 阻塞式IO和非阻塞式IO的区别 阻塞式IO:recvfrom方法读取数据,当数据没有到达linux内核空间的时候一直阻塞,等数据拿到了之后再复制一份发送给用户空间

    60620

    理解一下5IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。...IO有内存IO、网络IO和磁盘IO,通常我们说的IO指的是后两者。...2、5IO模型 《UNIX网络编程》说得很清楚,5IO模型分别是阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型、异步IO模型;前4为同步IO操作,只有异步IO模型是异步IO操作。...1、典型应用:select、poll、epoll三方案,nginx都可以选择使用这三个方案;Java NIO; 2、特点: 专一进程解决多个进程IO的阻塞问题,性能好;Reactor模式; 实现、开发应用难度较大...3-1、阻塞IO调用和非阻塞IO调用、阻塞IO模型和非阻塞IO模型 注意这里的阻塞IO调用和非阻塞IO调用不是指阻塞IO模型和非阻塞IO模型: 阻塞IO调用 :在用户进程(线程)中调用执行的时候,进程会等待该

    32.3K71

    图解四 IO 模型

    其实 BIO 和 NIO 这类的名词还有一个共同的名字叫——IO模型,总共有: IO 模型 由于信号驱动 IO 在实际中不常用,我们主要讲以下四模型: 同步阻塞 同步非阻塞 IO 多路复用 异步 IO...这里还是通过例子来理解这 4 IO 模型: 假设此时客户端正在发送一些数据到服务器,并且数据已经通过客户端的协议栈、网卡,陆陆续续的到达了服务器这边的内核态 Buffer 中了。...现在正在讨论的是 Non-Blocking IO,代表同步非阻塞,是一基础的 IO 模型。而 nio 包则是 New IO,里面的 IO 模型实际上是 IO多路复用,大家不要搞混淆了。...在之前的 BIO 和 NIO 中只涉及到一系统调用——read,在 IO 多路复用中要引入新的系统调用——select。...Linux 系统在 2.6 版本的时候才引入了异步IO,不过那个时候并不算真正的异步 IO,因为内核并不支持,底层其实是通过 IO 多路复用实现的。

    46610

    Linux的五IO模型?

    可见,进程的阻塞是进程自身的一主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。 当进程进入阻塞状态,是不占用CPU资源的。...将数据从内核(kernel)拷贝到用户进程(application)中 (Copying the data from the kernel to the process) Linux的五IO模型 在Linux...(UNIX)操作系统中,共有五IO模型,分别是: 阻塞IO模型(Blocking I/O) 非阻塞IO模型(non-blocking I/O) IO复用模型(I/O multiplexing) 信号驱动...Linux操作系统中,这就是一最简单的IO模型,即阻塞IO。 阻塞 I/O 是最简单的 I/O 模型,一般表现为进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。...异步IO模型(Asynchronous I/O) 我们钓鱼的时候,采用一高科技钓鱼竿,即全自动钓鱼竿。可以自动感应鱼上钩,自动收竿,更厉害的可以自动把鱼放进鱼篓里。

    92810

    Linux网络-五IO模型

    Linux网络-高级IO 零、前言 一、什么是IO 二、五IO模型 1、阻塞IO 2、非阻塞IO 3、信号驱动IO 4、IO多路转接 5、异步IO 三、高级IO重要概念 1、同步通信 vs 异步通信...,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动 从直观层面去理解IOIO是计算机和外设之间的数据流动过程,外设包含两重要设备(但不限于此):输入设备和输出设备。...,真正的IO过程是操作系统的事情,这里把应用程序的IO操作分为两动作:IO调用和IO执行,IO调用什么是应用程序对操作系统IO功能的一次触发,IO执行是操作系统的工作 IO调用的目的是将进程的内部数据迁移到外部即输出...: 进程向操作系统请求外部数据 操作系统将外部数据加载到内核缓冲区 操作系统将数据从内核缓冲区拷贝到进程缓冲区 进程读取数据继续后面的工作 二、五IO模型 1、阻塞IO 概念及介绍: 在进行IO读写时...异步IO 概念及介绍: 上述的四IO模型都是同步IO,和异步IO最大的差别就是看是否需要主动参与到IO读写中去 异步IO由内核在数据拷贝完成时,再通知应用程序(而信号驱动IO是告诉应用程序何时可以开始拷贝数据

    85830

    详解 Java 中 4 IO 模型

    Unix下五I/O模型: 同步阻塞I/O 同步非阻塞I/O I/O多路复用(select和poll) 信号驱动I/O(SIGIO) 异步非阻塞 IO 同步阻塞I/O 阻塞I/O下请求无法立即完成则保持阻塞...多路复用的特点是通过一机制一个进程能同时等待IO文件描述符,内核监视这些文件描述符(套接字描述符), 其中的任意一个进入读就绪状态,select, poll,epoll函数就可以返回。...对于监视的方式, 又可以分为 select, poll, epoll三方式。...而同步非阻塞方式可以把多个 IO 请求丢到后台去, 这就可以在一个进程里服务大量的并发 IO 请求。 IO多路复用归为同步阻塞模式 异步非阻塞 IO 相对于同步IO,异步IO不是顺序执行。...更详细的分析可参考 聊聊Linux5IO模型 Java中四I/O模型 上一章所述Unix中的五I/O模型,除信号驱动I/O外,Java对其它四I/O模型都有所支持。

    64520

    Java基础-常见IO模型

    因此,我们需要一更高效的 I/O 处理模型来应对更高的并发量 非阻塞IO 应用程序不断进行 I/O 系统调用轮询数据是否已经准备好的过程是十分消耗 CPU 资源的。...IO多路复用 如果调用recvform时,恰好没有数据,阻塞IO会使进程阻塞,非阻塞IO使CPU空转,不能充分发挥CPU作用 如果调用recvform时恰好有数据,则用户进程进入第二个阶段,读取并处理数据...多路复用-事件通知机制 当FD有数据可读时,我们调用epoll_wait就可以得到通知,但是事件通知的模型有两: LevelTriggered:简称LT,当FD有数据可读时,会重复通知多次,直到数据处理完成...EdgeTriggered:简称ET,当FD有数据可读时,只会通知一次,不管数据是否处理完成 信号驱动IO 信号驱动IO是与内核建立SIGIO的信号关联并设置回调,当内核有FD就绪时,会发出SIGIO...信号通知用户,期间用户应用可以执行其它业务,无需阻塞等待 当有大量IO操作时,信号较多,SIGIO处理函数不能及时处理可能导致信号队列溢出 而且内核空间与用户空间的频繁交互性能较低 异步IO

    15210

    UNIX下的五IO模型

    下面介绍五 IO 模型: 阻塞式IO 非阻塞式IO IO复用(select 和 poll) 信号驱动式IO(SIGIO) 异步IO(POSIX的aio_系列函数) 3.2....阻塞式IO模型 阻塞式IO模型是最常用的IO模型。 默认情况下,所有套接字都是阻塞的,如下图所示: 这样的IO模型中,系统调用会从应用进程空间切换到内核空间中运行一段时间后再切换回来。...IO复用模型 IO复用的系统调用有select和poll。 系统阻塞在这两个系统调用上,而不是阻塞在真正的IO系统调用上。...使用 IO 复用模型的好处在于可以同时等待多个描述符就绪,甚至可以实现复杂的等待条件。 等待多个描述符的另一实现是创建多个线程,每个线程使用一个阻塞式IO系统调用去等待一个描述符。 3.5....信号驱动式IO是在IO操作进行之前通知进程进行相应的操作,而与此不同,异步IO模型让内核完成全部的缓冲区复制工作,直到全部工作完成才去通知进程(比如产生某个信号) 4. 各种IO模型的比较

    47620

    主要的IO模型

    主要的IO模型 服务器端编程,经常需要构造高性能的网络应用,需要选用高性能的IO模型,这也是通关大公司面试必备的知识。...传统的IO模型都是同步阻塞IO。在Java中,默认创建的socket都是阻塞的。 其次,解释一下同步与异步: 同步IO,是一用户空间与内核空间的IO发起方式。...因此,基本上阻塞IO模型在高并发应用场景下是不可用的。 其次,解释一下同步与异步: 同步IO,是一用户空间与内核空间的IO发起方式。...Java的NIO(New IO),对应的不是四基础IO模型中的NIO(None Blocking IO)模型,而是另外的一模型,叫作IO多路复用模型(IO Multiplexing)。...IO多路复用模型的特点:IO多路复用模型的IO涉及两种系统调用(System Call),另一是select/epoll(就绪查询),一IO操作。

    1.1K10

    IO模型介绍和对比

    前言 unix提供的IO模型有几种,分别有哪些? 各种IO模型的特点是什么?他们有什么区别? 阻塞,非阻塞,同步,异步的区别? epoll为什么高效?...IO 阻塞式IO式最流行的IO模型 ?...异步IO 异步IO依赖信号处理程序来进行通知 不过异步IO与前面IO模型不同的是:前面的都是数据准备阶段的阻塞与非阻塞,异步IO模型通知的是IO操作已经完成,而不是数据准备完成 异步IO才是真正的非阻塞...各种IO模型对比 前面四IO模型的主要区别在第一阶段,他们第二阶段是一样的:数据从内核缓冲区复制到调用者缓冲区期间都被阻塞住!...前面四IO都是同步IOIO操作导致请求进程阻塞,直到IO操作完成 异步IOIO操作不导致请求进程阻塞 ? 参考 《unix网络编程》第一卷

    3.1K50

    IO模型和epoll详解

    ---- 五IO模型和epoll详解 一、I/O 模型 一个输入操作通常包括两个阶段: 等待数据准备好 从内核向进程复制数据 对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。...Unix 有五 I/O 模型: 阻塞式 I/O 非阻塞式 I/O I/O 复用(select 和 poll) 信号驱动式 I/O(SIGIO) 异步 I/O(AIO) 1、阻塞式 I/O 应用进程被阻塞...有三类型的描述符类型:readset、writeset、exceptset,分别对应读、写、异常条件的描述符集合。...是默认的一模式,并且同时支持 Blocking 和 No-Blocking。 2....应用场景 很容易产生一错觉认为只要用 epoll 就可以了,select 和 poll 都已经过时了,其实它们都有各自的使用场景。

    58120

    你应该知道的五IO模型

    写在前面 linux操作系统包含了五IO模型,各种上层编程语言或者网络编程框架的上层实现都是基于操作系统的这些IO实现来实现的。 五IO模型主要围绕:阻塞IO,非阻塞IO,异步IO来展开。...数据从内核空间拷贝到用户空间 IO模型 阻塞IO 进程发起IO调用,一直等待数据就绪和数据拷贝阶段完成,处于阻塞等待挂起中。 ?...信号驱动IO 异步IO 以上几种IO在数据复制阶段仍然是同步的,所以都属于某种程度的同步IO不是真正的异步IO。...异步IO IO模型对比 同步和异步IO的区别在于系统调用的recvfrom()方法是否阻塞。...epoll是linux2.6引入的新型一部IO多路复用技术,他的前辈是poll,所以我们现聊下poll。 在异步IO出现之前,所有IO都是同步的。

    46640
    领券