NIO学习

NIO学习
  • 姓名 :Non-blocking I/O 或 New I/O
  • 出生: JDK 1.4
  • 职务: 高并发网络服务器支持岗

NIO网络模型 :

在这里插入图片描述


NIO核心 :
  • Channel : 通道
  • Buffer : 缓冲区
  • Selector : 选择器或多路复用器
Channel 简介
  • 双向性
  • 非阻塞性
  • 操作唯一性
Channel 实现
  • 文件类 : FileChannel
  • UDP类 : DatagramChannel
  • TCP类 : ServerSocketChannel / SocketChannel
    在这里插入图片描述
Buffer 简介
  • 作用 : 读写 Channel 中数据
  • 本质 : 一块内存区域
Buffer 属性
  • Capacity : 容量
  • Position : 位置
  • Limit : 上限
  • Mark : 标记
Buffer 使用

在这里插入图片描述
2. 在这里插入图片描述
3.
在这里插入图片描述
4.
在这里插入图片描述
5.
在这里插入图片描述
6.
在这里插入图片描述
7.
在这里插入图片描述

Selector 简介
  • 作用 : I/O就绪选择
  • 地位 : NIO网络编程的基础
Selector 使用

在这里插入图片描述

SelectionKey 使用
  • 四种就绪状态常量
  • 有价值的属性

NIO编程实现步骤:
  • 第一步 : 创建 Selector
  • 第二步 : 创建 ServerSocketChannel ,并绑定监听端口
  • 第三步 : 将 Channel设置为非阻塞模式
  • 第四步 : 将 Channel注册到 Selector上,监听连接事件
  • 第五步 : 循环调用 Selector的 select方法,检测就绪情况
  • 第六步 : 调用 selectedKeys方法获取就绪 channe|集合
  • 第七步 : 判断就绪事件种类,调用业务处理方法
  • 第八步 : 根据业务需要决定是否再次注册监听事件,重复执行第三步操作
原生的NIO网络编程缺陷
  • 麻烦 : NIO类库和API繁杂
  • 心累 : 可靠性能力补齐,工作量和难度都非常大
  • 有坑 : Selector空轮询,导致CPU100%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值