netty
文章平均质量分 83
乘风破浪的码农
这个作者很懒,什么都没留下…
展开
-
HashedWheelTimer时间轮定时任务原理分析
一、示例代码HashedWheelTimer时间轮是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短平快任务,例如心跳检测。时间轮是一种非常惊艳的数据结构。其在Linux内核中使用广泛,是Linux内核定时器的实现方法和基础之一。Netty内部基于时间轮实现了一个HashedWheelTimer来优化I/O超时的检测,由于Netty动辄管理100w+的连接,每一个连接都会有很多超时任务。比如发送超时、心跳检测间隔等,如果每一个定时任务都启动一个Timer,不仅低效,而且会消耗大量的资源。原创 2021-10-09 16:31:23 · 1494 阅读 · 0 评论 -
Netty ObjectPool对象池技术原理分析
一、ObjectPool使用示例1.对需要使用对象池的对象,定义一个ObjectPool的静态全局变量RECYCLE,用于对象的分配和回收。并在对象内定义一个ObjectPool.Handle成员变量,并且将此变量作为构造函数参数传入,并将构造函数作为私有。然后添加一个回收的方法Recycle,在不需要此对象时调用handle.recycle()获取对象则调用ObjectPool.get@Slf4jpublic class ObjectRecycleTest { private s原创 2021-09-30 17:17:11 · 626 阅读 · 0 评论 -
ThreadLocal的原理和FastThreadLocal的优势
一、ThreadLocal的编写测试1.只需定义一个静态全局的ThreadLocal变量,然后在线程的执行方法里面,对这个对象的某个方法,set后,同一个线程get,能正常取出数据。2.线程池使用ThreadLocal变量,要注意,任务执行完要删除ThreadLocal数据,防止脏数据传播到同一个线程的下一个任务中。@Slf4jpublic class ThreadLocalTest { private static ThreadLocal<String> nameTh原创 2021-09-29 17:56:44 · 285 阅读 · 0 评论 -
Netty:option和childOption参数设置说明
Channel配置参数(1).通用参数CONNECT_TIMEOUT_MILLIS : Netty参数,连接超时毫秒数,默认值30000毫秒即30秒。MAX_MESSAGES_PER_READ Netty参数,一次Loop读取的最大消息数,对于ServerChannel或者NioByteChannel,默认值为16,其他Channel默认值为1。默认值这样设置,是因为:ServerChannel需要接受足够多的连接,保证大吞吐量,NioByteChannel可以减少不必要的系统调用sel原创 2021-09-28 16:12:20 · 278 阅读 · 0 评论 -
NioEventLoop加载流程分析
一、我们首先看NioEventLoopGroup创建和初始化过程。EventLoopGroup workEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("clientThread", false));1.看下类继承图2.MultithreadEventLoopGroup父类实现了channel的接口注册,next取下一个可用的NioEventLoop @Override public Event.原创 2021-09-26 16:16:34 · 231 阅读 · 0 评论 -
ServerBootstrap的启动流程
一、ServerBootstrap的启动示例代码 EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("bossThread",false)); EventLoopGroup workEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("workThread",false)); .原创 2021-09-18 16:20:49 · 1420 阅读 · 0 评论 -
nio的epoll和selector实现流程分析
一、NETTY底层使用的是NIO的selector和epoll进行实现的,select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说把数据从内核拷贝到用户空间是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间...原创 2021-09-17 17:06:38 · 808 阅读 · 3 评论 -
netty 管道和handler的加载和处理流程
一、pom引入包,此处版本为4.1.52.Final <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-kqueue</artifactId> <scope>provided</scope> </dependency>原创 2021-09-10 16:45:55 · 7658 阅读 · 0 评论