JAVA-----BIO、NIO、AIO

打印 上一主题 下一主题

主题 1955|帖子 1955|积分 5865

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、基础知识

1、同步与异步


  • 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
  • 异步: 异步就是发起一个调用后,立即得到被调用者的回应表示已吸收到请求,但是被调用者并没有返回效果,此时我们可以处理其他的请求,被调用者通常依赖变乱,回调等机制来关照调用者其返回效果。
同步和异步的区别最大在于异步的话调用者不需要等待处理效果,被调用者会通过回调等机制来关照调用者其返回效果。
2、阻塞和非阻塞


  • 阻塞: 阻塞就是发起一个请求,调用者不停等待请求效果返回,也就是当火线程会被挂起,无法从事其他任务,只有当条件就绪才能继承。
  • 非阻塞: 非阻塞就是发起一个请求,调用者不消不停等着效果返回,可以先去干其他事情。
二、BIO、NIO、AIO 区别


  • 同步阻塞BIO
    一个连接一个线程。
    JDK1.4之前,建立网络连接的时间采取BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判定服务端是否有线程相应,如果没有则会不停等待或者遭到拒绝请求,如果有的话会等待请求结束后才继承实行。
  • 同步非阻塞NIO
    一个请求一个线程。
    NIO主要是想解决BIO的大并发题目,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。
    JDK1.4开始支持NIO,实用于连接数目多且连接比力短的架构,好比聊天服务器,并发范围于应用中。
  • 异步非阻塞AIO
    一个有效请求一个线程。
    JDK1.7开始支持AIO,实用于连接数目多且连接比力长的结构,好比相册服务器,充实调用OS到场并发操纵。
三、生活案例


  • BIO(Blocking I/O):
    假如你是一个传统的服务员,当一个顾客点餐后,你会站在厨房门口等待厨师完成这个订单。在等待的过程中,你不能做其他事情,好比服务其他顾客。只有当这个订单完成后,你才能继承服务下一个顾客。这就是阻塞式I/O,服务员(I/O操纵)在等待餐点完成的过程中被阻塞,无法举行其他操纵。
  • NIO(Non-blocking I/O):
    如今,你是一个更高效的服务员,当顾客点餐后,你会告诉厨师开始预备,然后立即转身去服务其他顾客。你不需要在厨房门口等待,而是可以同时处理多个订单。每隔一段时间,你会检查一下之前点的餐是否已经预备好。如果预备好了,你就去取餐并送到顾客桌上。这就好坏阻塞式I/O,服务员(I/O操纵)在等待餐点完成的过程中不会被阻塞,可以同时处理多个任务。
  • AIO(Asynchronous I/O):
    假如你是一个拥有高科技设备的服务员,当顾客点餐后,你只需要将订单输入到一个智能系统中,然后就可以去做其他事情了。当餐点预备好后,系统会自动关照你,你只需要去取餐并送到顾客桌上。在这个过程中,你不需要不断检查餐点是否完成,系统会负责所有的监控和关照工作。这就是异步I/O,服务员(I/O操纵)在提交了点餐请求后,可以完全去做其他事情,直到系统关照餐点已经预备好。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表