首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Netty线程模型

一起学习下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模型中有四个核心概念

Resources 资源(请求/任务)

Synchronous Event Demultiplexer 同步事件复用器

Dispatcher 分配器

Request Handler 请求处理器

EventLoopGroup初始化过程

EventLoop的启动

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

Bind绑定端口过程

channel

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

Channel:和Java Nio中的Channel同名,是Netty对网络底层读写和连接的抽象。

AbstractChannel:是Channel的抽象实现类,抽象出了parent,id,unsafe,pipeline等概念。

AbstractNioChannel:封装Java NIO,通过Selector选择器进行IO事件的监听,拥有

SelectionKey,readInterestOp等NIO的属性,这是在这个类的构造函数中设置了非阻塞模式。

AbstractNioByteChannel此抽象类开始的分支中的类都是关于客户端的Channel,AbstractNioMessageChannel此抽象类开始的分支中的类都是关于服务端的Channel,前者和后者都继承自AbstractNioChannel,区别在于客户端Channel注册的感兴趣的事件时READ事件,服务端Channel注册的感兴趣的事件时ACCEPT事件。

NioByteUnsafe类是客户端实现读写的类,NioMessageUnsafe类是服务端实现读写的类,二者的区别在于读写的具体实现不同。客户端与NioSocketChannel关联的配置类为NioSocketChannelConfig类,服务端与NioServerSocketChannel关联的配置类为NioServerSocketChannelConfig类。

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201130A0579T00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券