1.什么是BIO,NIO,AIO
JAVA BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程并处理,如果这个连接不做任何事情会造成不必要的开销,当然可以通过线程池机制改善
JAVA NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理
JAVA AIO(NIO2):异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理

2.使用场景
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

3.BIO 同步并阻塞
tomcat采用的传统的BIO(同步阻塞IO模型)+线程池模式,对于十万甚至百万连接的时候,传统BIO模型是无能为力的:
①线程的创建和销毁成本很高,在linux中,线程本质就是一个进程,创建销毁都是重量级的系统函数
②线程本身占用较大的内存,像java的线程栈一般至少分配512K-1M的空间,如果系统线程过高,内存占用是个问题
③线程的切换成本高,操作系统发生线程切换的时候,需要保留线程的上下文,然后执行系统调用,如果线程数过高可能执行线程切换的时间甚至大于线程执行的时间,这时候带来的表现是系统load偏高,CPUsy使用率很高
④容易造成锯齿状的系统负载。系统负载是用活动线程数或CPU核心数,一旦线程数量高但外部网络环境不是很稳定,就很容易造成大量请求的结果同时返回,激活大量阻塞线程从而使系统负载压力过大。

4NIO同步非阻塞
NIO基于Reactor,当socket有流可读或可写入socket,操作系统会相应的通知引用程序进行处理,应用再将流读取到缓冲区或写入操作系统。也就是,不是一个链接就要对应一个处理线程,而是一个有效请求对应一个线程,当连接没有数据时,是没有工作线程来处理的
Reactor模型

nio只有acceptor的服务线程是堵塞进行的,其他读写线程是通过注册事件的方式,有读写事件激活时才调用线程资源区执行,不会一直堵塞等着读写操作,Reactor的瓶颈主要在于acceptor的执行,读写事件也是在这一块分发

5AIO异步非堵塞IO

AIO需要一个链接注册读写事件和回调方法,当进行读写操作时,只须直接调用API的read或write方法即可,这两种方法均为异步,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序
即,read/write方法都是异步的,完成后会主动调用回调函数

IO模型有哪些,讲讲你理解的nio ,他和bio,aio的区别是啥,谈谈reactor模型。相关推荐

  1. reactor模型实现

    文章目录 前言 一.什么是reactor模型 二.使用步骤 1.声明一个reactor结构体 2.事件的设置,添加,以及删除 2.read,write,accept的事件的处理回调函数 3.初始化re ...

  2. 关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解

    文章写得很详细很清楚了,对我的理解帮助很大. 转载自:http://www.cnblogs.com/whyandinside/archive/2012/03/04/2379234.html. 概括来说 ...

  3. 五分钟快速理解 Reactor 模型

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 本文将介绍基于进 ...

  4. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型

    前言 网络I/O,可以理解为网络上的数据流.通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写.单个socket时,使用一个线程即可高效处理:然而如果是10K个socket连接 ...

  5. 基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型

    本文主要记录服务器的 IO 模型的类型(从多路复用,异步 IO 讲到 Proactor Reactor 模型),包括 Real World nginx 和 apache ,kafka 等分析,配备自洽 ...

  6. [转]关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解

    ---恢复内容开始--- 关于Blocking IO, Non-Blocking IO 和 Asynchronous I/O的理解 概括来说,一个IO操作可以分为两个部分:发出请求.结果完成.如果从发 ...

  7. 简单深入理解高性能网络编程(Netty)中的Reactor模型(图文+代码)

    文章目录 定义 传统网络交互方式 Reactor 模型组成 Netty中`Reactor`模型的实现 Reactor 单线程模式 非主从Reactor模式(单Reactor多线程模型) 主从React ...

  8. Zuul和Gateway请求IO模型比对(WebFlux优势)以及Reactor模型分析

    文章目录 背景 Zuul 请求处理模型 Gateway Doug Lea Reactor模型 总结 背景 最近在做一些开源网关的调研,首选也是主流的网关就是Zuul和Gateway.然后在性能上基于Z ...

  9. IO线程模型Reactor模型

    概述 前言: 要对IO模型.多路复用.java NIO网络编程有一定的理解才能看懂. 不同的线程模型,对程序的性能影响很大,要搞钱Netty的线程模型,就要了解一下各种线程模型. 目前存在的线程模型有 ...

最新文章

  1. filter java 是单例的吗_JAVA 设计模式之 单例模式详解
  2. rk4.0系统鼠标图标更换
  3. 基于 ELK Stack 和 Spark Streaming 的日志处理平台设计与实现
  4. kafka自带没web ui界面,怎么办?安装个第三方的
  5. python中文文本分析_python使用snownlp进行中文文本处理以及分词和情感分析 - pytorch中文网...
  6. fread python有没有_将C的fread转换为python,没有得到预期的输出
  7. 玩互联‮的网‬核心秘诀‮什是‬么? ​‎
  8. 【MySQL】时间格式转换 DATE_FORMAT函数篇
  9. 本特利177230-00-01-CN
  10. yum安装软件报错:Invalid configuration value: failovermethod=priority...
  11. 服务器虚拟化怎么配置,教你如何配置服务器虚拟化环境
  12. 思考的救赎(一):三消游戏实现探索
  13. WEBRTC中VAD算法及思想的数学解析
  14. 公司/企业如何管理?管理技巧是什么?《宁向东管理学课》音频资料免费下载
  15. 《设计模式之禅》试评员名单公布
  16. 程序员做外包,真的没地位没出路吗
  17. Hugging face 的入门使用
  18. Xunit.net 单元测试学习——按顺序测试
  19. web应用防火墙检测恶意流量的方法
  20. opencvjs 磨皮美颜

热门文章

  1. 数据、运营相关案例问答题(一)【牛客网:数据分析试题广场】
  2. 【小白向】简单随意DIY你的U盘图标
  3. 51单片机DAC数模转换
  4. 使用unity制作AR的方法 EasyAR+ARCore
  5. 混合个人训练第四十六场(A,B题解) A 数论线代全家桶 (all) B: 看星星 (stars)
  6. AD那些事 切割板子形状,线的弧度转换
  7. c语言数字的写法田字格,数字100田字格怎么写
  8. CodeBlocks:1: 在MacOS上安装20.03
  9. OSChina 周三乱弹 —— 以后面试可以说自己精通B站源码了吧
  10. 计算100以内最大质数和求100以内的质数