ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java IO理解

2022-08-22 17:00:47  阅读:160  来源: 互联网

标签:异步 Java Reactor 阻塞 理解 内核 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,Reactor,阻塞,理解,内核,IO,调用者
来源: https://www.cnblogs.com/ogleede/p/16613418.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有