JAVA-----BIO、NIO、AIO

一、基础知识

1、同步与异步

  • 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。

  • 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

2、阻塞和非阻塞

  • 阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。

  • 非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。

二、BIO、NIO、AIO 区别

  1. 同步阻塞BIO

    一个连接一个线程。

    JDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判断服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话会等待请求结束后才继续执行。

  2. 同步非阻塞NIO

    一个请求一个线程。

    NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。

    JDK1.4开始支持NIO,适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。

  3. 异步非阻塞AIO

    一个有效请求一个线程。

    JDK1.7开始支持AIO,适用于连接数目多且连接比较长的结构,比如相册服务器,充分调用OS参与并发操作。

三、生活案例

  1. BIO(Blocking I/O):

    假如你是一个传统的服务员,当一个顾客点餐后,你会站在厨房门口等待厨师完成这个订单。在等待的过程中,你不能做其他事情,比如服务其他顾客。只有当这个订单完成后,你才能继续服务下一个顾客。这就是阻塞式I/O,服务员(I/O操作)在等待餐点完成的过程中被阻塞,无法进行其他操作。

  2. NIO(Non-blocking I/O):

    现在,你是一个更高效的服务员,当顾客点餐后,你会告诉厨师开始准备,然后立即转身去服务其他顾客。你不需要在厨房门口等待,而是可以同时处理多个订单。每隔一段时间,你会检查一下之前点的餐是否已经准备好。如果准备好了,你就去取餐并送到顾客桌上。这就是非阻塞式I/O,服务员(I/O操作)在等待餐点完成的过程中不会被阻塞,可以同时处理多个任务。

  3. AIO(Asynchronous I/O):

    假如你是一个拥有高科技设备的服务员,当顾客点餐后,你只需要将订单输入到一个智能系统中,然后就可以去做其他事情了。当餐点准备好后,系统会自动通知你,你只需要去取餐并送到顾客桌上。在这个过程中,你不需要不断检查餐点是否完成,系统会负责所有的监控和通知工作。这就是异步I/O,服务员(I/O操作)在提交了点餐请求后,可以完全去做其他事情,直到系统通知餐点已经准备好。

相关推荐
码界奇点7 分钟前
Java Web学习 第15篇jQuery从入门到精通的万字深度解析
java·前端·学习·jquery
雨落秋垣9 分钟前
手搓 Java 的用户行为跟踪系统
java·开发语言·linq
盖世英雄酱5813615 分钟前
java深度调试技术【第六七八章:宽字节与多字节】
java·后端
爱丽_1 小时前
深入理解 Java Socket 编程与线程池:从阻塞 I/O 到高并发处理
java·开发语言
济南壹软网络科技有限公司1 小时前
云脉IM的高性能消息路由与离线推送机制摘要:消息的“零丢失、低延迟”之道
java·即时通讯源码·开源im·企业im
Seven971 小时前
剑指offer-46、孩⼦们的游戏(圆圈中最后剩下的数)
java
hhwyqwqhhwy1 小时前
Linux file->private
linux·运维·服务器
WongKyunban1 小时前
在Linux下制作软件安装包
linux·运维·服务器
serendipity_hky1 小时前
互联网大厂Java面试故事:核心技术栈与场景化业务问题实战解析
java·spring boot·redis·elasticsearch·微服务·消息队列·内容社区
我真不会起名字啊1 小时前
C、C++中的sprintf和stringstream的使用
java·c语言·c++