【BIO、NIO、AIO、Netty】

news2024/11/25 4:49:02

什么是IO

  • Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。
  • 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流,字符串流,对象流等等等。
  • 比如程序从服务器上下载图片,就是通过流的方式从网络上以流的方式到程序中,在到硬盘中
  • 在这里插入图片描述

在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别

  • 同步,一个任务的完成之前不能做其他操作,必须等待(等于在打电话)
  • 异步,一个任务的完成之前,可以进行其他操作(等于在聊QQ)
  • 阻塞,是相对于CPU来说的, 挂起当前线程,不能做其他操作只能等待
  • 非阻塞,,无须挂起当前线程,可以去执行其他操作

什么是BIO

BIO:同步并阻塞,服务器实现一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,没处理完之前此线程不能做其他操作(如果是单线程的情况下,我传输的文件很大呢?),当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

什么是NIO

NIO:同步非阻塞,服务器实现一个连接一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4之后开始支持。

什么是AIO

  • AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理,AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用操作系统参与并发操作,编程比较复杂,JDK1.7之后开始支持。
  • AIO属于NIO包中的类实现,其实IO主要分为BIO和NIO,AIO只是附加品,解决IO不能异步的实现
  • 在以前很少有Linux系统支持AIO,Windows的IOCP就是该AIO模型。但是现在的服务器一般都是支持AIO操作

什么Netty

  • Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
  • Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

Netty是由NIO演进而来,使用过NIO编程的用户就知道NIO编程非常繁重,Netty是能够能跟好的使用NIO

BIO和NIO、AIO的区别

  • BIO是阻塞的,NIO是非阻塞的.
  • BIO是面向流的,只能单向读写,NIO是面向缓冲的, 可以双向读写
  • 使用BIO做Socket连接时,由于单向读写,当没有数据时,会挂起当前线程,阻塞等待,为防止影响其它连接,,需要为每个连接新建线程处理.,然而系统资源是有限的,,不能过多的新建线程,线程过多带来线程上下文的切换,从来带来更大的性能损耗,因此需要使用NIO进行BIO多路复用,使用一个线程来监听所有Socket连接,使用本线程或者其他线程处理连接
  • AIO是非阻塞 以异步方式发起 I/O 操作。当 I/O 操作进行时可以去做其他操作,由操作系统内核空间提醒IO操作已完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win--C盘程序员常见应用内存空间处理

写在前面: 本篇用于记录我对于C盘各个应用内存处理的总结, 文章目录 前置知识vscode的.vscode文件迁移可以移动 软件推荐wsl和docker存储管理修改安装目录压缩磁盘 pip缓存清理JetBrains系列 前置知识 在win中有着这样一个命令mklink,可以…

Java飞行记录器

目录 JFR和JMC启动飞行记录用JFR对比不同GC器运行结果记录结果GC配置GC Summary垃圾收集 JFR和JMC JFR全称为Java Flight Recorder,即Java飞行记录器 JMC全称为JDK Mission Control,即JDK任务控制 先贴一段官网的简介: Java Flight Recorder…

基于鸿蒙系统的智能衣柜管理系统设计与实现_kaic

摘 要 随着城市的扩大与科学技术的发展,人们逐渐开始关注衣柜功能的改进,存储效果的优化和智能使用的升级。个性化、功能化、智能化的衣柜将出现在人们的家庭生活中,并且起到重要作用。 为了满足当前人们对智能衣柜的需求,本设计…

面试真的被问麻了......

前几天组了一个软件测试面试的群,没想到效果直接拉满,看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经,感觉非常有参考价值,于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋,打开…

Java -并发(多线程)-Interview面试题收集

1、多线程并发 1)多线程中 synchronized 锁升级的原理是什么? synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid…

Mabatis Plus 之ID生成策略控制(Auto、Input、assign_id、assign_uuid)

文章目录 知识点1:TableId1 环境构建2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤2:删除测试数据并修改自增值步骤3:运行新增方法 INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置ID步骤3:运行新增方法 ASSIGN_ID策略步骤1:设置生成策略为ASSIGN_ID步…

HTTPS的工作流程

hi,大家好,好久不见,今天为大家带来HTTPS协议的工作流程 认识HTTPS 加密是什么 HTTPS的工作流程 1.认识HTTPS HTTPS也是应用层协议,让我们再来回忆一下TCP/IP五层协议模型 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP协议在传输的时候是以…

2023河海大学838计算机学硕考研高分经验分享

大家好,我是陪你考研每一天的大巴学长。 大巴学长为大家邀请到了2023年838计算机学硕初试第二名的高分学长,为大家分享一下他的考研经验,经验里详细介绍了各科的复习方法,很有参考意义。 希望对大家有所借鉴和帮助,在…

C++13-STL模板-01向量(vector)

C13-STL模板 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 大纲要求 【 3 】算法模板库中的函数:min、max、swap、sort 【 4 】栈 (stack)、队列 (queue)、链表 (list)、 向量(vector)等容器 1.函数模板 泛…

HNU数据结构与算法分析-作业1-算法分析

1. (简答题) 1.(教材3.4)(a)假设某一个算法的时间代价为 ,对于输入规模n,在某台计算机上实现并完成该算法的时间为t秒。现在另有一台计算机,运行速度为第一台的64倍,那么t秒内新机器…

FreeRTOS(5)----互斥量

一,互斥信号量 互斥信号量是一个具有优先级继承的二值信号量,在同步的应用中二值信号量最合适。互斥信号量适合互斥访问的那些应用。在互斥访问中互斥信号量相当于一个钥匙,当一个任务使用这个资源,资源就会被上锁,防…

[CTF/网络安全] 攻防世界 robots 解题详析

[CTF/网络安全] 攻防世界 robots 解题详析 robots.txt姿势总结 题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。 进入靶机,页面空白。 查看页面源代码: 再次结合题目Rob…

Java常用工具之StringUtils类

目录 一、字符串判空二、分隔字符串三、判断是否为纯数字四、将集合拼接成字符串五、其他方法 字符串(String)在我们的日常工作中,用得非常非常非常多。 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、…

chatgpt赋能Python-python3_取模

Python3 取模:介绍与使用 在Python3中,取模运算是比较常用的运算符。本文将介绍Python中的取模运算符,并分享多种使用取模运算符的方法。 什么是取模运算符 在数学上,取模运算是将一个整数除以另一个整数,然后返回相…

后端传到前端的JSON数据大写变小写--2023

问题复现:1. 首先我先说一下,我用了lombok,事实证明和这个也有关系 前端这里写的也是按照驼峰命名来写的 控制台打印出来的数据 后台打印出来的数据 解决方法: 1. 重写get/set方法 因为我在实体类上标注了Data注解 重写get/se…

电动力学专题:闵氏几何(伪欧几何)

相对性原理和光速不变 物理定律在所有的惯性参考系里都是平等的,不存在一个特殊的惯性系。真空中的光速在所有的惯性系里都是一样的。 洛伦兹变换 距离度量:闵氏(Mins geometry) 狭义相对论下,不随惯性系变化的量闵式距离(时空间…

HNU数据结构与算法分析-作业2-线性结构

1. (简答题) 4.1 假设一个线性表包含下列元素&#xff1a; <|2,23,15,5,9> 使用Shaffer编写的教材《数据结构与算法分析》的List ADT编写一些C语句&#xff0c;删除值为15的元素。 &#xff08;要求&#xff1a;采用C或C语言描述算法&#xff09; 4.6 使用Shaffer编写…

[CTF/网络安全] 攻防世界 cookie 解题详析

[CTF/网络安全] 攻防世界 cookie 解题详析 HTTP响应的查看方法method 1method 2 总结 题目描述&#xff1a;X老师告诉小宁他在cookie里放了些东西&#xff0c;小宁疑惑地想&#xff1a;这是夹心饼干的意思吗&#xff1f; 根据提示&#xff0c;获取页面Cookie中的数据即可 页面提…

学生成绩信息管理系统

系列文章 任务2 学生成绩信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试score.txtbk.txt界面展示显示所有学生信息添加学生信息删…

【数据结构】数据结构中的栈

文章目录 前言什么是栈栈的实现栈的初始化入栈出栈栈的判空栈内有效数据个数返回栈顶数据栈的销毁 前言 该篇文章来了解数据结构中的栈&#xff0c;栈与队列都为一种线性存储结构&#xff0c;同时栈与队列在逻辑结构上&#xff0c;都只能在头或者尾进行对数据的操作&#xff1…