前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty线程模型

Netty线程模型

作者头像
IT架构圈
发布2020-12-02 14:28:05
3800
发布2020-12-02 14:28:05
举报
文章被收录于专栏:IT架构圈IT架构圈

一起学习下Netty,从Netty的相关简介,Demo的着陆,从线程模型的话,里面用到了NIO的相关知识,可以看之前的文章回顾下。

Netty简介
  • ① 介绍

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

  • ② 四个内容

1.Reactor 线程模型:一种高性能的多线程设计思路。 2.Netty中自定义的channel概念,增强版的通道概念。 3.ChannelPipline职责链设计模式:事件处理机制。 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的理念。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Netty简介
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档