首页 > 编程语言 >java中的BIO NIO AIO有什么区别?

java中的BIO NIO AIO有什么区别?

时间:2023-05-26 21:00:50浏览次数:44  
标签:BIO java NIO 读写操作 阻塞 AIO IO

BIO、NIO 和 AIO 都是 Java 中用于处理网络编程的技术,它们的主要区别如下:

  1. BIO:BIO(Blocking IO)阻塞式 IO,指 I/O 的读写操作是阻塞的。当读写操作发生时,线程被阻塞,一直等到 I/O 完成才返回。BIO 是 Java 最早的网络编程 API,也是最常用的 API。BIO 的实现简单,易于理解和使用,但是由于阻塞式的 IO 和单线程的模型,导致并发性能较差。
  2. NIO:NIO(Non-Blocking IO)非阻塞 IO,是在 JDK1.4 中加入的,支持面向缓冲区的,基于通道(Channel)与缓冲区(Buffer)的 IO 操作。与 BIO 不同的是,当读写操作发生时,线程不会被阻塞,而是直接返回。这个特点使得 NIO 可以同时管理多个网络连接,因此并发性能比较好。但是,相对于BIO,NIO 的实现较为复杂。
  3. AIO:AIO(Asynchronous IO)异步 IO,是在 JDK1.7 中引入的新的 IO API。与 BIO 和 NIO 不同,AIO 是异步非阻塞 IO,避免了线程的阻塞。在 AIO 模型中,读写操作将不再等待,而是在异步 IO 告知操作完成时才会被通知。AIO 经常被用于高性能的网络服务器应用中,特别是支持大量并发用户的场景。

总之,BIO 简单易懂,NIO 支持并发性能较好,AIO 性能较好适合高并发场景。

标签:BIO,java,NIO,读写操作,阻塞,AIO,IO
From: https://blog.51cto.com/u_16095802/6358857

相关文章

  • Java--异常
    Java--异常异常异常的分类ErrorException总结编译时期异常和运行时期异常编译时期异常在编译阶段,必须要手动处理,否则代码报错.运行时期异常在编译时期不需要处理,是代码运行时出现的异常.区别......
  • java中常用的判断数据为空的工具
    一些工具的引入可以是的代码变得更加整洁,同时对于数据的判断会更加的全面pom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"x......
  • 五、JUC-Java内存模型JMM
    一、一些疑问什么是Java内存模型JMMJMM与volatile他们两个之间的关系JMM有哪些特性为什么要有JMM,他们为什么出现,功能和作用是什么happens-before先行发生原则是什么二、计算机硬件存储体系计算机存储结构,从本地磁盘到主存到CPU缓存,也就是从硬盘到内存到CPU一般对应的程序......
  • Java大文件分片上传/多线程上传方案
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W......
  • 学习日记——Java循环结构
    1.while循环①语法:while循环语法//参数的初始化inti=1;//循环条件while(i<10){//循环操作System.out.println("这是测试");//变更参数i++;}特点:先判断,再执行②实战案例:2.dowhile循环①语法:dowhile语法 //初始化参数inti=0;do{......
  • java怎么打印一个对象的内存地址
    在Java一般使用HashCode来代表对象的地址,但是两个相同的对象就不行了,两个相同的对象的hashcode是相同的。  如果要对比两个相同的对象的地址可以使用,System.identityHashCode(传输进去的参数是一个对象)......
  • Java笔记(十):函数式接口
    函数式接口有且仅有一个抽象方法的接口JDK8中,只有一个抽象方法的接口称为函数式接口,我们就能使用Lambda。针对一个接口中,是否有大于一个抽象方法?JDK8为我们新增了一个注解:@FunctionalInterface。它能够帮助我们检测这个接口是不是只有一个抽象方法,如果有两个抽象方法,则会报......
  • 使用minio进行文件存储
    一.Docker拉取镜像(确保自己的服务器已经安装Docker)dockerpullminio/minio二.启动一个miniio容器dockerrun--nameminio-p9090:9000-p9999:9999-d\--restart=always-e\"MINIO_ROOT_USER=minio"\-e"MINIO_ROOT_PASSWORD=minio123"\-v/home/minio/......
  • Java大文件分片上传/多线程上传实例解析
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求         <formid="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="pos......
  • Java笔记(九):线程池
    三大方法Executors.newSingleThreadExecutor();//单个线程Executors.newFixedThreadPool(5);//固定的线程池大小Executors.newCachedThreadPool();//可伸缩的以上底层都是由ThreadPoolExecutor实现阿里开发手册:线程池不允许使用Executors去创建,而是通过ThreadP......