Java IO理解
2022/8/23 14:25:37
本文主要是介绍Java IO理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java BIO NIO AIO理解
同步 异步
同步:发起一个调用后,被调用者未处理完请求之前,不返回
异步:发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果。此时可以处理其他请求,被调用者依靠事件、回调等机制来通知调用者告知其结果。
阻塞 非阻塞
阻塞:发起请求后,等待结果返回,当前线程会被挂起,无法从事其他任务。
非阻塞:发起一个请求,调用者不需要等待结果直接返回。
BIO NIO AIO
BIO:同步阻塞IO
NIO:同步非阻塞IO,基于Reactor模式实现
AIO:异步非阻塞IO,基于Proactor模式实现
阻塞:read 阻塞调用 内核准备数据 内核准备好数据将数据拷贝到应用
非阻塞IO: read 多次询问内核数据是否准备好 内核准备好数据 同步从内核拷贝数据到应用
非阻塞IO在最后一步从内核拷贝数据时仍是同步的。
异步IO: read 直接返回 内核准备数据 内核准备好数据,从内核拷贝数据通知到应用 通知应用。
非阻塞IO和异步IO的区别在于,Reactor模型感知的是就绪可读写事件,Proactor模型感知的是可读写事件。
Reactor
Reactor主要由Reactor和处理资源池两部分组成
- Reactor负责监听和分发事件,连接时间、读写事件
- 处理资源池负责处理事件 read -> 业务逻辑 -> send
单Reactor 单线程
- Reactor 监听和分发事件
- Acceptor 获取连接
- Handler 处理业务
优点:无线程竞争
缺点:无法利用多核性能、只要一个线程,处理业务时就无法处理其他连接事件
单单不适合计算密集型场景,只适用于业务处理非常快速的场景。
redis采用的单单,redis业务处理在内存完成,速度很快,性能瓶颈不在cpu。
单Reactor 多线程
单Reactor场景,只有一个Reactor监听和响应事件,高并发时容易成为性能瓶颈。
多Reactor 多线程
netty 和 memcache采用了这种
Proactor
参考
- 图解系统-小林coding
这篇关于Java IO理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding