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

五分钟理解NIO与BIO

java NIO与BIO的区别?

BIO -- Blocking IO 即阻塞式 IO。
NIO -- Non-Blocking IO, 即非阻塞式 IO 或异步 IO。

BIO 基于字节流和字符流进行操作,数据的读取写入必须阻塞在一个线程内等待其完成。

NIO 主要有三大核心部分:

  • Channel (通道):所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地。
  • Buffer (缓冲区):一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据
  • Selector (选择器、多路复用器):多路复用,用于实现一个线程管理多个 Channel

NIO 基于 Channel 和 Buffer 进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector 用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道,处理多个事件。

综上,它们之间的区别有:
1、BIO,面向流的,只能读或者只能写,同步阻塞 IO 模式
2、NIO,面向块的(缓冲区),可以同时进行读写,同步阻塞 IO 模式

 

同步阻塞、同步非阻塞、异步的区别?

同步阻塞:调用者发出请求后会一直等待结果

同步非阻塞:调用者发出请求后就去执行其他任务,过一会再询问被调用者执行结果

异步:当一个异步过程调用发出后,调用者不会立即得到结果。而是在“发出后”,“被调用者“通过状态,来通知调用者,或通过回调函数处理这个调用

阻塞式IO、非阻塞式IO甚至包括多路复用IO都是基于操作系统级别对“同步IO”的实现


 



 

http://www.lryc.cn/news/105999.html

相关文章:

  • Python数据可视化工具——Pyecharts
  • cjson常用API使用总结
  • Shell脚本学习-case语句开发rsync服务的脚本
  • 使用docker部署一个jar项目
  • 【Linux命令200例】tee将输入内容输出到屏幕和文件
  • 使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思
  • python面试题【题目+答案】
  • Rocky(centos) jar 注册成服务,能开机自启动
  • 科大讯飞-鸟类分类挑战赛-测试【1】
  • 两行CSS让页面提升渲染性能
  • UniApp中tabbar设置了position: fixed以及bottom:0后出现一条缝隙,看到了后面的内容
  • 设计模式行为型——责任链模式
  • Xamarin.Android中Intent的使用
  • matplotlib绘制方波圆周分解动画
  • vue3+ts 实现枚举
  • 【Python】5分钟了解11个最佳的Python编译器和解释器
  • 如何安装、部署、启动Jenkins
  • sqlalchemy flask长时间未使用 导致数据库连接失效
  • Ubuntu 20.04 系统或图像界面卡死或完全无响应处理方法
  • Linux编辑器 - vim使用
  • 【Windows】磁盘快捷修复
  • Java 线程的多种状态
  • AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】
  • 【浪费了我两个小时时间】Microsoft store无法加载页面0x80131500
  • 【动态规划】子序列系列
  • URL存储解锁数据管理的新思路,重新定义数据传输与共享(@vue/repl)
  • matlab程序中文乱码
  • 【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”
  • curl 介绍和使用
  • 5、VMWARE安装、MobaXterm SSH连接 、Ubuntu xrdp安装使用