Java教程

Java IO理解

本文主要是介绍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 单线程

image-20220822164015456

  • Reactor 监听和分发事件
  • Acceptor 获取连接
  • Handler 处理业务

优点:无线程竞争

缺点:无法利用多核性能、只要一个线程,处理业务时就无法处理其他连接事件

单单不适合计算密集型场景,只适用于业务处理非常快速的场景。

redis采用的单单,redis业务处理在内存完成,速度很快,性能瓶颈不在cpu。


单Reactor 多线程

image-20220822164248653

单Reactor场景,只有一个Reactor监听和响应事件,高并发时容易成为性能瓶颈。


多Reactor 多线程

image-20220822164431429

netty 和 memcache采用了这种


Proactor

image-20220822164943749

image-20220822164952327

参考

  • 图解系统-小林coding
这篇关于Java IO理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!