AIO,BIO,NIO区别

AIO,BIO,NIO都进程进行IO的三种不同方式。

对于网络模型,这三种方式具体表现如下:

BIO:最常见的阻塞同步IO,是指客户端请求时,服务端会起一个线程,或者是在线程池调一个线程去处理读写,并维护连接。如果此时是长连接的话,这种方式无法达到较高并发量,因为线程本身不能起太多。

试想如下场景:做一个聊天服务器,你要对每个用户维护一个长连接。如果你用户量很高,有10w个同时在线,那你要起10w个线程,显然不实际。而且这10w个用户可能只有一部分在发送信息,那一定有很多线程是在阻塞态的,能不能让一个线程去阻塞呢?

NIO:非阻塞同步IO,linux下的select,poll,epoll可以视为NIO的实现。非阻塞是指服务端不会等待IO事件,而是把等待交给内核或者一个专门的线程去做,利用异步回调的方式,将IO前的等待和执行IO的时间分离。

继续上面的场景:如果这时候10w个用户在线,如果把等待都交给一个线程或者内核去做,像select,poll都是采用轮询的方式,即——我不知道谁要发生IO事件,那一个个问一下好了。如果用户数量少也没关系,但是用户数量到10w以上级别的话,你轮询一次也要10w次,十分浪费资源。epoll利用信号机制,当可读或者可写时,内核会发信号提醒,然后用户态调用回调函数执行对应事件。

AIO:非阻塞异步IO,aio其实和epoll原理很像,但是epoll是信号提醒之后还要自己进行IO操作,而aio是先给内核制定对应内存,让内核有空就去读写,然后读写完发送信号告诉进程,由进程处理。其实从网络编程来说,我觉得aio和epoll差别不算太大,因为像TCP和UDP,内核都有维护一块缓存暂时存放数据,epoll也只是将数据从内核读出来而已。

原文地址:https://www.cnblogs.com/scaugsh/p/10293401.html

时间: 2024-08-13 01:19:15

AIO,BIO,NIO区别的相关文章

(转)IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别

本文来自:https://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral,非常感谢. 如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题 (1)什么是NIO(Non-blocked IO),AIO,BIO (2) java IO 与 NIO(New IO)的区别 (3)select 与 epoll,poll区别 我胡乱说了一气,自己边说边觉得完蛋了.果然,二面

JAVA - IO - IO的类型(AIO, BIO, NIO)

IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行. 二.NIO NIO本身是基于事件驱动思想来完成的,其主

BIO,NIO区别

1.BIO编程     1.1.传统的BIO编程     网络编程的基本模型是C/S模型,即两个进程间的通信. 服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信. 传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口:Socket负责发起连接操作.连接成功后,双方通过输入和输出流进行同步阻塞式通信. 简单的描述一下BIO的服务端通信模型:采用BIO通信模型的服务端,通常由一个独

AIO,BIO,NIO的区别

看到知乎上一篇回答,解决了疑惑:https://www.zhihu.com/question/56673416 第三位作者的回答...原谅我没有登录知乎,不然一定给他留赞. 很多人的解释都是扯在一起的,反而让人觉得晕乎乎的,或者他们自己也没真正的搞懂.... 这个模型的前提是 clint端发请求,,然后分析时就没clint啥事了,有些人说客户端阻塞...所有模型中Clint不都是阻塞的么,这是http协议呀,必须有返回!!主要是针对server进行模型分析. 阻塞和非阻塞区分:请求id的线程是否

BIO NIO AIO区别

JAVA 中BIO,NIO,AIO的理解 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下:  序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词.如有不足之处,还望告知. 在弄清楚上面的几个问题之前,我们首先得明白什么是同步,异步,阻塞,非阻塞,只有这几个单个概念理解清楚了,

JAVA 中BIO,NIO,AIO的理解

JAVA 中BIO,NIO,AIO的理解 博客分类: 网络编程 [转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词.如有不足之处,还

也谈BIO | NIO | AIO (Java版--转)

关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO | NIO | AIO 以Java的角度,理解,linux c里也有AIO的概念(库),这些概念不知道什么原因被炒火起来,这里只从Java角度入手. BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO,简单理解:一

转载:BIO | NIO | AIO

http://my.oschina.net/bluesky0leon/blog/132361 也谈BIO | NIO | AIO (Java版) 转载自:zheng-lee博客 发布时间: 2013/05/21 12:56 关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO | NIO |

Netty5序章之BIO NIO AIO演变

Netty5序章之BIO NIO AIO演变 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠的网络服务器和客户端程序.Netty简化了网络程序的开发,是很多框架和公司都在使用的技术.更是面试的加分项.Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架.而BIO,NIO,AIO更是笔试中要考,面试中要问的技术.也是一个很好的加分项,加分就是加工资,你还在等什么?本章带你细细品味三者的不同! 流程图: 技术:BIO,NIO,AIO 说明:g

初理解Java中的BIO,NIO,AIO

初识: java 中的 BIO.NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装.程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码.只需要使用Java的API就可以了. 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞. 同步与异步: 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回. 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但