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

IOIO模型

网络IO 服务端如何实现高并发、海量连接与网络IO的方式有着千丝万缕的联系,与磁盘IO不同的是,网络IO是从网卡拿数据,仅此而已 在讨论网络IO的方式之前,我们应该先对阻塞/非阻塞、同步/异步的概念有一个比较清晰的认识...,可以将网络IO分为阻塞IO和非阻塞IO 具体来说,用户态进程发起了读写请求,但是内核态数据还未准备就绪(磁盘、网卡还没准备好数据), 如果进程需要阻塞等待,直到内核数据准备好,才返回,则为阻塞IO;...如果内核立马返回,不会阻塞进程,则为非阻塞IO; 同步IO与异步IO 在一次IO中数据传输的两个步骤中,但凡有一处发生了阻塞,就被称为同步IO;如果两个步骤都不阻塞,则被称为异步IO。...IO多路复用 为了解决上面提到的NIO会导致大量系统调用的问题,出现了IO多路复用模型。...(采用 CC BY-NC-SA 4.0 许可协议进行授权) 本文标题:《 IOIO模型

15300

IO模型

要想解决这个问题,我们需要先理清楚Unix和类Unix系统的I/O模型IO也就是输入输出即读写操作,在操作系统内部逻辑上一般会分两个空间(实际是内存映射):用户空间和内核空间。...了解这个之后我们就可以讲解下5种不同的IO模型。...五种不同IO模型的比较: 阻塞模型较为直观,服务器端为每个请求的客户连接建立一个线程或者进程,并处理这个连接数据。...从上述的IO模型中我们发现在现如今常见的大量活跃并发的场景中,只有epoll模型的效率是最高的。...PS: 用通俗的一个例子来简单描述下这几个网络IO模型: 一个钓鱼的过程,鱼钓上来放到鱼桶里是第一个阶段(鱼竿自动完成),将鱼拿到自己家的厨房是第二个几段。

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

IO模型

非阻塞IO模型 简介:非阻塞IO通过进程反复调用IO函数(多次系统调用,并马上返回);在数据拷贝的过程中,进程是阻塞的; Linux下,可以通过设置socket使其变为non-blocking。...实例   但是非阻塞IO模型绝不被推荐。    ...IO复用模型  简介:主要是select和epoll;对一个IO端口,两次调用,两次返回,比阻塞IO并没有什么优越性;关键是能实现同时对多个IO端口进行监听;       IO复用这个词可能有点陌生...同步IO引起进程阻塞,直至IO操作完成。 异步IO不会引起进程阻塞。 IO复用是先通过select调用阻塞。 三  IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了。...按照这个定义,四个IO模型可以分为两大类,之前所述的blocking IO,non-blocking IOIO multiplexing都属于synchronous IO这一类,而 asynchronous

65650

IO模型

前言 说到IO模型,都会牵扯到同步、异步、阻塞、非阻塞这几个词。从词的表面上看,很多人都觉得很容易理解。但是细细一想,却总会发现有点摸不着头脑。...最适合IO模型的例子应该是咱们平常生活中的去餐馆吃饭这个场景,下文就结合这个来讲解一下经典的几个IO模型。...(网络IO把磁盘换做网卡即可) IO模型 同步阻塞 去餐馆吃饭,点一个自己最爱吃的盖浇饭,然后在原地等着一直到盖浇饭做好,自己端到餐桌就餐。这就是典型的同步阻塞。...在默认情况下,这个调用会一直阻塞直到数据接收完毕,就是一个同步阻塞的IO方式。这也是最简单的IO模型,在通常fd较少、就绪很快的情况下使用是没有问题的。 ?...这就类似信号驱动的IO模型。 ?

53020

Unix IO模型

2.Unix五种IO模型: ? (1)阻塞式IO模型: ?...在这个IO模型中,用户进程执行一个系统调用(recvfrom),内核准备好数据,并将数据从内核复制到用户空间,才会返回结果给用户进程,整个IO过程都是阻塞的,Java BIO就是这种实现方式。...(2)非阻塞式IO模型 ? 非阻塞式IO也就是在等待数据的阶段是可以做其他事情的,而应用进程通过反复调用recvfrom等待返回成功指示(轮询),而第二步仍然是需要等待的。...(3)IO多路复用模型 ? IO多路复用有三种方式:select,poll,epoll。为何叫多路复用,是因为它I/O多路复用可以同时监听多个fd,如此就减少了为每个需要监听的fd开启线程的开销。...(4)信号驱动式IO模型 ? 首先我们允许Socket进行信号驱动IO,并安装一个信号处理函数,进程继续运行并不阻塞。

84630

IO复用——几种IO模型对比

阻塞I/O模型 缺省时,所有套接口都是阻塞的。《Unix网络编程》一书中,前五章的所有例子都使用阻塞I/O模型。...[非阻塞I/O模型] I/O复用模型 在I/O复用模型下,我们不再阻塞于真正的I/O系统调用recvfrom,而是在select和poll这两个系统调用之一阻塞。...[信号驱动I/O模型] 异步I/O模型 异步I/O模型中,不再调用函数recvfrom,而是调用函数aio_read,给内核传递描述字,缓冲区指针,缓冲区大小,文件偏移,并告诉内核当整个操作完成时如何通知...[异步I/O模型] 五种I/O模型的比较 除了真正的异步I/O模型以外,其他几种模型,最后一阶段的处理都是相同的——阻塞于recvfrom调用,将数据从内核拷贝到应用缓冲区。...[五个I/O模型的比较]

1.4K71

网络IO模型

IO本质上是对数据缓冲区的读写,主要分为文件IO和网络IO,基本模型有很多,可以从两个方面去认识 同步和异步,阻塞和非阻塞。...阻塞IO也是常说的BIO,是一个单线程的阻塞模型,在执行数据拷贝的时候,会阻塞主进程,直到数据拷贝完成。...image.png 图中是信号IO的处理模型,这种模型的优势在于第一时间收到数据准备好的消息,免去了select的阻塞和轮询。...异步IO 异步IO被称为AIO,AIO的模型与信号IO类似,当用户发起read操作后,就可以做其他的事情,当数据准备完成后, 将数据拷贝到用户内存,当这个过程完成后,给用户的进程发一个Signal告诉read...【参考资料】 五种网络IO模型:阻塞IO、非阻塞IOIO多路复用、信号驱动IO以及异步IO IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) (本文完) 作者:付威 博客地址

79620

浅析IO模型

目录 概念 IO模型 同步阻塞IO 同步非阻塞IO 多路复用IO 信号驱动IO 异步非阻塞IO 概念 谈论模型之前,先了解一下相关的概念知识,扩展一下深度。 IO如何交互呢?...日常用户进程获取数据,IO主要分为两个阶段: 从磁盘空间到内核空间; 从内核空间到用户空间; ? IO模型 同步阻塞IO 概念:用户进程一旦发送请求,就一直处于等待状态,直至有数据返回。...多路复用IO 概念:多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程。...信号驱动IO 概念: 当用户线程发起一个IO请求操作,会给对应的socket注册一个信号函数,然后用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,用户线程接收到信号之后,便在信号函数中调用...IO读写操作来进行实际的IO请求操作。

30620

IO模型分类

在学习I/O模型的学习总结,如有错误,不吝指正(^.^) I/O复用场景: 当客户处理多个描述字时; 一个客户处理多个套接口; 一个TCP服务器既要处理监听套接口,又要处理已连接套接口; 一个服务器既要处理...又要处理UDP; 如果一个服务器处理多个服务或多个协议; 一个输入操作分为: 等待数据准备好(等待数据到达,然后拷贝到内核的缓冲区); 从内核到进程拷贝数据(从内核缓冲区拷贝到应用缓冲区); 阻塞I/O模型...: 函数调用阻塞至数据到达且拷贝到应用缓冲区,或者出错时返回(如信号中断); 非阻塞I/O模型: 函数调用若内核无数据准备好返回EWOULDBLOCK错误,若内核数据准备好则将数据拷贝到应用缓冲区,返回成功指示...; I/O复用模型: 阻塞在select或poll模型,而非真正的I/O系统调用阻塞,等待数据报套接口可读时调用读操作函数拷贝数据到应用缓冲区。...异步I/O模型: 当整个过程完成后通知我们,包括将数据从内核缓冲区拷贝到应用缓冲区,与信号驱动I/O不同的是前者是在完成时通知,后者是在开始时通知。

13020

系统IO模型

五大IO模型 ❝我们都知道Java中提供了三大IO模型,BIO,NIO,AIO,这三大IO模型都是基于操作系统的IO模型工作的,接下来我们仔细聊一下操作系统的IO模型 ❞ 1....IO 怎么样的操作被称为一次IO呢? 「简单来讲:一次IO就是将数据从硬盘中加载到内存中」 2....信号驱动IO 线程不会注意数据状态,当数据复制完成以后,会发送一个信号量,告知数据已经准备就绪,可以进行处理 「底层实现」 ? 5. 多路复用IO 通过建立多个通道,来实现可以IO复用。...「以上四种IO都是同步IO,下面介绍一种异步IO即java中的AIO」 6. 异步IO 当前进程发送一个请求,系统准备好所有的数据,并且将数据复制到用户空间中,然后去通知进程执行其他的事情。...五种模型的比较 ? 参考文章: 漫话:如何给女朋友解释什么是Linux的五种IO模型? BIO,NIO,AIO 总结

52210

Linux IO 模型

BIO BIO(Blocking I/O)是最传统的 I/O 模型,它是阻塞的,即在进行 I/O 操作时,转到内核空间处理,应用程序会被阻塞,直到操作完成。...fdset 从用户态拷贝到内核态,在高并发下是个巨大的性能开销(可优化为不拷贝); 调用 select 阻塞后,用户进程虽然没有轮询,但在内核还是通过遍历的方式来检查 fd 的就绪状态(可通过异步 IO...但 AIO 的编程模型相对复杂,通常不适用于所有类型的应用。在某些情况下,使用更简单的 I/O 多路复用模型(如epoll、kqueue)可能更为合适。AIO 的实现方式因操作系统而异。...以下是一个简单的 Java AIO 示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer...为了解决该问题,首先的研究方向就是 I/O 模型的优化,逐渐解决了 C10K 的问题。epoll、kqueue、IOCP 就是 I/O 模型优化的一些最佳实践,这几种技术实现分别对应于不同的系统平台。

19820

IO模型简述

在本文接下来的一章中,我将通过举例的方式向大家介绍五种 I/O 模型。如果大家是第一次了解 I/O 模型方面的知识,理解起来会有一定的难度。...2.2 非阻塞 I/O 模型 与阻塞 I/O 模型相反,在非阻塞 I/O 模型下。应用进程与内核交互,目的未达到时,不再一味的等着,而是直接返回。然后通过轮询的方式,不停的去问内核数据准备好没。...抛开上面的 I/O 模型不谈,如果某种 I/O 模型能让进程的工作的时间大于等待的时间,那么这种模型就是高效的模型。...像 Nginx,lighttd 等服务器软件都选用该模型。好了,关于 I/O 模型就说到这里。 最后附一张几种 I/O 模型的对比图: ? 3....参考 《UNIX网络编程》 Java NIO(3): IO模型 - 知乎 本文在知识共享许可协议 4.0 下发布,转载需在明显位置处注明出处 作者:coolblog 本文同步发布在我的个人博客:http

69970

IO模型介绍

前面介绍了NIO中的buffer和Channel,而我们将NIO主要的使用场景还是在网络环境中,在具体介绍之前我们需要了解下IO模型 IO模型 序号 类型 1 阻塞I/O 2 非阻塞I/O 3 I.../O多路复用 4 信号驱动I/O 5 异步I/O I/O模型需要的基础 文件描述符   Linux 的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令(api),返回一个...I/O运行过程   我们来看看IO在系统中的运行是怎么样的(我们以read为例) ?   ...非阻塞I/O   recvfrom从应用层到内核的时候,如果没有数据就直接返回一个EWOULDBLOCK错误,一般都对非阻塞I/O模型进行轮询检查这个状态,看内核是不是有数据到来。 ?...在Linux下它是这样子实现I/O复用模型的: 调用select/poll/epoll/pselect其中一个函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。 ?

39500

知识总结:IO模型基础IO基础

2、Linux网络I/O模型 Linux内核将所有外部设备都看作一个文件来操作,对文件的操作都会调用内核提供的系统命令,返回一个fd(文件描述符)。.../test.cpp",O_RDONLY); cout< return 0; } 3、Linux提供了5种网路I/O模型 阻塞I/O模型 用户线程调用内核操作,在内核操作返回之前一直处于阻塞。...非阻塞I/O模型 用户线程调用内核操作,在内核操作返回之前轮询是否有数据返回。...I/O复用模型 Linux提供了select/poll,进程将一个或多个fd传递给select或poll系统调用, 阻塞在select操作上,这样select/poll就可以帮我们侦测多个fd是否处于就绪状态...信号驱动I/O模型 执行信号函数 异步I/O模型 告知内核启动某个操作,并让内核在整个操作完成之后包括 将数据从内核复制到用户缓冲区通知我们。

64590

五种IO模型

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

20230
领券