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

面试-javaIO机制

1.BIO
BIO:是传统的javaIO以及部分java.net下部分接口和类。例如,socket,http等,因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能,譬如基于字节流的InputStream 和OutputStream.基于字符流的Reader和Writer.
在这里插入图片描述
特点:在IO执行的两个阶段都被阻塞住。优点:代码简单,直观。缺点:IO的效率,扩展性存在瓶颈。同步。阻塞

2.NIO
NIO 是一种同步非阻塞的 I/O 模型,在 Java 1.4 中引入了 NIO 框架,对应 java.nio 包,提供了 Channel , Selector,Buffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它支持面向缓冲的,基于通道的 I/O 操作方法。 NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞 I/O 来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发.
在这里插入图片描述
特点:程序需要不断的去询问内核是否已经准备好,第一阶段非阻塞,第二阶段阻塞。

NIO的核心是:Channels ,buffers, Selectors.基本上所有的IO在NIO都是从一个Channels开始。
在这里插入图片描述
在这里插入图片描述
Selector:允许单线程处理多个Channel
在这里插入图片描述
NIO的底层使用了操作系统的多路复用。
优点是单线程可以处理多个网络IO.
在这里插入图片描述
(1)问题:select,poll,epoll的区别
在这里插入图片描述
Select有最大链接数的限制,因为其使用的是数组;poll没有,使用的是链表;
在这里插入图片描述
在这里插入图片描述

3.AIO
在这里插入图片描述
在这里插入图片描述
4.BIO,NIO,AIO分析
在这里插入图片描述
BIO适用于连接数比较小,且固定的架构。这种方式对服务器资源要求比较高。是1.4以前的唯一选择,直观,简单容易理解。
NIO适用于连接数目多,且连接比较短的架构。比如聊天服务器,编程比较复杂。
AIO适用于连接数目多,且连接比较长的架构。比如:相册服务器,Jdk7以后才支持。

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

相关文章:

  • 在.NET Core中,config和ConfigureServices的区别和作用
  • App Inventor 2 如何实现多个定时功能?
  • 技术驱动的音乐变革:AI带来的产业重塑
  • 重生之我要学后端0--HTTP协议和RESTful APIs
  • 深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络
  • AI Infra简单记录
  • 三英战吕布 | 第5集 | 温酒斩华雄 | 竖子不足与谋 | 三国演义 | 逐鹿群雄
  • 【C语言】自定义类型:结构体
  • 算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
  • [每周一更]-(第103期):GIT初始化子模块
  • 单例模式---线程安全实现
  • Agent技术在现代软件开发与应用中的探索
  • c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功
  • 时序数据中的孤立野点、异常值识别及处理方法
  • JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇
  • MCU解决800V电动汽车牵引逆变器的常见设计挑战的3种方式
  • 《逆向投资 邓普顿的长赢投资法》
  • C++中main函数的参数、返回值分别什么意思?main函数返回值跟普通函数返回值一样吗?
  • Java程序员学习Go开发Higress的WASM插件
  • Python入门-基本数据类型-数字类型
  • 小程序web-view无法打开该页面的解决方法
  • 海外媒体发稿:媒体宣发套餐的作用分享-华媒舍
  • 【R语言】plot输出窗口大小的控制
  • 【shell脚本实战案例】数据磁盘初始化
  • 1.7 计算机体系结构分类
  • 数据结构之B树:深入了解与应用
  • Tensorflow入门实战 T06-Vgg16 明星识别
  • SpringBoot 3.3.1 + Minio 实现极速上传和预览模式
  • Linux: network: 丢包分析的另一个途径 tracing
  • 【保姆级教程+配置源码】在VScode配置C/C++环境