当前位置: 首页 > news >正文

Java中BIO、NIO、AIO 有什么区别?

微信搜索《Java鱼仔》,每天一个知识点不错过

(一)每天一个知识点

Java中BIO、NIO、AIO 有什么区别?

(二)结论

同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。

BIO即同步阻塞IO,实现模型为一个连接就需要一个线程去处理。这种方式简单来说就是当有客户端来请求服务器时,服务器就会开启一个线程去处理这个请求,即使这个请求不干任何事情,这个线程都一直处于阻塞状态。

BIO模型有很多缺点,最大的缺点就是资源的浪费。想象一下如果QQ使用BIO模型,当有一个人上线时就需要一个线程,即使这个人不聊天,这个线程也一直被占用,那再多的服务器资源都不管用

NIO使用了多路复用器机制,以socket使用来说,多路复用器通过不断轮询各个连接的状态,只有在socket有流可读或者可写时,应用程序才需要去处理它,在线程的使用上,就不需要一个连接就必须使用一个处理线程了,而是只是有效请求时(确实需要进行I/O处理时),才会使用一个线程去处理,这样就避免了BIO模型下大量线程处于阻塞等待状态的情景。

AIO是在JDK1.7中推出的新的IO方式–异步非阻塞IO,也被称为NIO2.0,AIO在进行读写操作时,直接调用API的read和write方法即可,这两种均是异步的方法,且完成后会主动调用回调函数。简单来讲,当有流可该取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当保作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

(三)再多学一点

有关Java中BIO、NIO和AIO,我专门写过一篇博客,大家可以看一下:
JavaIO详解–尽可能将BIO、NIO、AIO讲得通俗易懂

相关文章:

  • 网络协议系列之二:HTTP(2)
  • redis和mysql数据不一致问题如何解决?
  • Spring中的资源加载策略
  • 你知道迭代器 Iterator 是什么吗?
  • 什么是乐观锁、什么是悲观锁,两种锁在Java中的具体应用场景有哪些
  • Error: Out of memory! attempting SFTP connectio
  • 谈一谈session和cookie的区别,以及session的实现机制
  • Android--activity获取返回值
  • 你能说出四种创建线程的方式吗?
  • IOS 多线程01-线程基础知识
  • 说一下runnable 和 callable 有什么区别?Future是什么?
  • Spring MVC 3.0 深入及对注解的详细讲解
  • 线程的 run()和 start()有什么区别?sleep() 和 wait() 有什么区别?
  • 你对线程池的了解有多少?知道为什么阿里不让用Java提供的线程池吗?
  • Android音频底层调试-基于tinyalsa
  • hexo+github搭建个人博客
  • 「译」Node.js Streams 基础
  • codis proxy处理流程
  • ES10 特性的完整指南
  • Java基本数据类型之Number
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • magento 货币换算
  • PAT A1092
  • Service Worker
  • spark本地环境的搭建到运行第一个spark程序
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue-router 实现分析
  • Vue全家桶实现一个Web App
  • Webpack 4 学习01(基础配置)
  • WePY 在小程序性能调优上做出的探究
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于for循环的简单归纳
  • 开源SQL-on-Hadoop系统一览
  • 浅谈Golang中select的用法
  • 通过几道题目学习二叉搜索树
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • Java总结 - String - 这篇请使劲喷我
  • 数据可视化之下发图实践
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #NOIP 2014# day.1 T2 联合权值
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (Git) gitignore基础使用
  • (搬运以学习)flask 上下文的实现
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (万字长文)Spring的核心知识尽揽其中
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET项目中存在多个web.config文件时的加载顺序
  • .考试倒计时43天!来提分啦!
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @EnableWebMvc介绍和使用详细demo
  • @ModelAttribute使用详解