• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
你的小铃铛呀
博客园    首页    新随笔    联系   管理    订阅  订阅

BIO ,NIO ,AIO

一、同步阻塞I/O(BIO):

服务器实现模式: 一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理

弊端:如果这个连接不做任何事情会造成不必要的线程开销

解决措施:可以通过线程池机制来改善

使用场景:适用于连接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中,在jdk1.4以前是唯一的io

 例:假设一个烧开水的场景,有一排水壶在烧开水, 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。

 

二、同步非阻塞I/O(NIO):

服务器实现模式:一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理

使用场景:适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,jdk1,4开始支持

 例: 拿烧开水来说,是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。

三、异步非阻塞I/O(AIO):

服务器实现模式:一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理。

使用场景:AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,jdk1.7开始支持。

 例:烧开水中就是,为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了

四、IO与NIO区别:

1.IO面向流,NIO面向缓冲区

2.IO的各种流是阻塞的,NIO是非阻塞模式

3.Java NIO的选择允许一个单独的线程来监视多个输入通道,可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入或选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道

 







posted @ 2022-10-20 11:17  你的小铃铛呀  阅读(36)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3