NIO 学习

1. BIO网络模型

缺点:
  • 阻塞式I/O模型
  • 弹性伸缩能力差
  • 多线程耗资源

2. NIO网络模型

优点:
  • 非阻塞式I/O -> 一个线程监听
  • 弹性伸缩能力强 -> 一个线程处理所有请求
  • 单线程节省资源
缺点
  • NIO类库和API繁杂
  • 可靠性能力补齐,工作量和难度都非常大
  • Selector空轮询,导致CPU100%
NIO核心
  • Channel: 通道
  • Buffer: 缓冲区
  • Selector: 选择器或多路复用器(检测多个Channel状态,管理多个网络链接)
Channel 简介
  • 双向性
  • 非阻塞性(可以设置)
  • 操作唯一性
Buffer 简介
  • Capacity 容量
  • Position 位置
  • Limit 上限
  • Mark 标记
Buffer API
// 初始化长度为10的Buffer
ByteBuffer.allocate(10);
// 写入数据
byteBuffer.put("abc".getBytes());
// 写模式=》读模式
byteBuffer.flip();
// 读取
byteBuffer.get();
// 记录当前Position位置
byteBuffer.mark();
// 重置mark位置
byteBuffer.reset();
// 所有属性重置
byteBuffer.clear();
SelectionKey简介
  • 四种就绪常量
  • 有价值的属性

参考

  1. Thrift(Java版)到网络编程(三)—异步和NIO
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NIO是java1.4推出的一种全新的IO模型,全称是java non-blocking IO,提供ByteBuf...
    jwfy阅读 653评论 0 2
  • NIO NIO称为Non-blocking I/O 或 New I/O,就是非阻塞IO或者新IO BIO网络模型 ...
    Kenny_Yu阅读 287评论 0 0
  • 背景知识 同步、异步、阻塞、非阻塞 首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下。 同步:AP...
    大数据奋进中阅读 283评论 0 0
  • 原文:https://juejin.im/post/5cb2f8d7e51d456e500f7cf3 阻塞IO 如...
    符文杰9527阅读 859评论 0 0
  • IO模型 阻塞IO如果数据没有准备就绪,就一直等待,直到数据准备就绪;整个进程会被阻塞。 非阻塞IO需不断询问内核...
    gnocuohz阅读 190评论 0 0