您的位置 首页 java

JAVA的Netty核心概念之线程模型

Netty简介

  • ① 介绍

Netty是一个高性能,高可扩展性的异步 事件驱动 的网络应用框架,它极大地简化了TCP和UDP客户端和服务端开发等 网络编程

  • ② 四个内容

1.Reactor 线程模型:一种高性能的 多线程 设计思路。
2.Netty中自定义的channel概念,增强版的通道概念。
3. Channel Pipline职责链设计模式:事件处理机制。
4.内存管理:增强的ByteBuf缓冲区。

  • ③ API

netty.io

  • ④ 如何学习

网上的很多都是直接说理论,感觉很多时候直接给你对蒙圈了,其实还是从实践来出发去学习更有效果,
netty的源码中,有个专门的目录里面有各种的实例,直接通过netty的源码中加入中文的注释的方式。
github .com/netty/netty/tree/4.1/example/src/main/ JAVA /io/netty/example

  • ⑤ Netty线程模型

为了让NIO处理更好的利用多线程特性,Netty实现了Reactor线程模型。
Reator模型中有四个核心概念

  1. Resources 资源(请求/任务)
  2. Synchronous Event Demultiplexer 同步事件复用器
  3. Dispatcher 分配器
  4. Request Handler 请求处理器

  • ⑥ EventLoopGroup初始化过程

  • ⑦ EventLoop的启动

EventLoop 组神实现了 Executor 接口,当调用executor方法提交任务时,则判断是否启动,未启动则调用内置的executor创建新县城来出发run方法执行。

  • Bind 绑定端口过程

  • ⑨ channel

netty中的Channel是一个 抽象 的概念,可以理解为对JDK NIO Channel的增强和拓展,增加了很多属性和方法。

  1. Channel:和Java Nio中的Channel同名,是Netty对网络底层读写和连接的抽象。
  2. AbstractChannel: 是Channel的抽象实现类,抽象出了parent,id,unsafe,pipeline等概念。
  3. AbstractNioChannel:封装Java NIO,通过Selector选择器进行IO事件的监听,拥有
    SelectionKey,readInterestOp等NIO的属性,这是在这个类的构造函数中设置了非阻塞模式。
  4. AbstractNioByteChannel此 抽象类 开始的分支中的类都是关于客户端的Channel,AbstractNioMessageChannel此抽象类开始的分支中的类都是关于服务端的Channel,前者和后者都继承自AbstractNioChannel,区别在于客户端Channel注册的感兴趣的事件时READ事件,服务端Channel注册的感兴趣的事件时 ACCEPT 事件。
  5. NioByteUnsafe类是客户端实现读写的类,NioMessageUnsafe类是服务端实现读写的类,二者的区别在于读写的具体实现不同。客户端与NioSocketChannel关联的配置类为NioSocketChannelConfig类,服务端与NioServerSocketChannel关联的配置类为NioServerSocketChannelConfig类。

PS:毕竟抽象的设计模式,在学习过程中会有难懂的地方,需要根据代码去理解。主要是领会Reactor的理念。

文章来源:智云一二三科技

文章标题:JAVA的Netty核心概念之线程模型

文章地址:https://www.zhihuclub.com/200939.shtml

关于作者: 智云科技

热门文章

网站地图