【通信】Java NIO模型

本文介绍了Java NIO在网络服务中的应用,探讨了如何通过Reactor模式实现可伸缩的网络服务。内容涵盖了Reactor的单线程和多线程版本,详细解析了NIO API中的Buffer、Channel、Selector及其作用,旨在理解Java NIO的事件驱动设计和提升网络服务性能。
摘要由CSDN通过智能技术生成

目录

1.可伸缩的网络服务

1.1 可伸缩的目标

1.2 解决方案

2.事件驱动设计

3.Reactor模式

3.1 单线程版本

3.2 多线程版本

3.2.1 工作线程多线程(并行工作者)

3.2.2 Reactor多线程

4.NIO API

4.1 Buffer

4.2 Channel通道

4.2.1 SelectableChannel

4.2.2 SocketChannel

4.2.3 ServerSocketChannel

4.2.4 FileChannel

4.3 Selector

4.3.1 SelectionKey


1.可伸缩的网络服务

经典BIO网络服务端代码设计 thread-per-request,每个处理都可以在独立线程中执行。

存在着很多问题,为了更好的可伸缩对其进行优化。

1.1 可伸缩的目标

  1. 负载增加时(更多客户端连接)的优雅退化
  2. 性能随着资源(CPU、内存、磁盘、带宽)不断提高
  3. 同时满足可用性和性能目标:低时延、满足高峰需求、服务质量可调控

1.2 解决方案

分而治之,总体服务分为以上5个处理阶段,网络服务基础处理结构

  1. 读取请求read
  2. 解码请求decode
  3. 业务处理process
  4. 响应编码encode
  5. 写入响应write

分:将整个处理过程分成几个子任务,每个任务执行一个非阻塞的操作

治: 借助JavaNIO机制,IO事件(select)触发分发给自任务handler非阻塞地读写数据。NIO中select方法是阻塞的,而read、write读写是非阻塞的,由于多路复用,多个通道多种事件均可触发select返回,大大减少了阻塞的事件,充分利用了CPU资源。

2.事件驱动设计

事件驱动设计依赖Java NIO机制

更高效

资源少(不需要每个客户端都创建线程)

低负载 更少的线程切换

难实现

划分非阻塞操作

需跟踪服务逻辑状态

3.Reactor模式

Reactor顾名思义,反应,当IO事件发生时程序做出反应,包含两种角色:Reactor、handler(包括acceptor和IOhandler)

1.Reactor响应IO事件,主要调用select阻塞方法查找事件,分发事件给对应handler处理

2.handler执行非阻塞操作(类似于事件监听器),通常根据事件类型分为Acceptor和IOHandler,Acceptor调用accept()非阻塞方法接收连接、IOHandler调用read()和write()读写数据

两个角色的协作&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值