如果想把自己的财富上交给国家,有专门的机构叫上交所
NioEventLoop 处理的任务类型
1. 普通任务:通过 NioEventLoop 的 execute() 方法向任务队列 taskQueue 中添加任务。
Netty 写数据时会封装 WriteAndFlushTask 提交给 taskQueue ,
taskQueue 的实现类是多生产者单消费者队列 MpscChunkedArrayQueue,多线程并发添加任务时,保证线程安全。
2. 定时任务:通过调用 NioEventLoop 的 schedule() 方法向定时任务队列 scheduledTaskQueue 添加一个定时任务,用于周期性执行该任务。
例如,心跳消息发送等 ,定时任务队列 scheduledTaskQueue 采用优先队列 PriorityQueue 实现。
3. 尾部队列:tailTasks 相比于普通任务队列优先级较低,在每次执行完 taskQueue 中任务后会去获取尾部队列中任务执行。
尾部任务并不常用,主要用于做一些收尾工作,例如统计事件循环的执行时间、监控信息上报等。
HashedWheelTimer 是 Netty 中实现定时任务的工具,它基于时间轮算法,能够高效地处理大量的定时任务。
FastThreadLocal 使用数组而不是哈希表来存储数据,避免哈希冲突,提高访问速度。
每个FastThreadLocal实例在创建时会分配一个唯一的索引(index),
FastThreadLocal 必须和 FastThreadLocalThread 配套使用
Reactor 三种线程模型:
单线程模型:EventLoopGroup 只包含一个 EventLoop,Boss 和 Worker 使用同一个EventLoopGroup;
多线程模型:EventLoopGroup 包含多个 EventLoop,Boss 和 Worker 使用同一个EventLoopGroup;
主从多线程模型:
EventLoopGroup 包含多个 EventLoop,Boss 是主 Reactor,Worker 是从 Reactor,它们分别使用不同的 EventLoopGroup,主 Reactor 负责新的网络连接 Channel 创建,然后把 Channel 注册到从 Reactor。
netty源码 设计原理 IO模型 、内存管理、线程模型、数据结构
拆包/粘包、数据编解码、TCP断线重连 空闲连接 心跳
网络、分布式服务
内存管理 linux内存管理 内存分配器 内存池
高性能数据结构
HashedWheelTimer
FastThreadLocal
无锁队列 MpscArrayQueue
沪深300和中证A500都是由市值大且流动性好的股票组成,但两者在编制上有所不同。
沪深300强调大市值,而中证A500则更注重行业均衡,淡化了市值在指数中的权重
每日一曲 20241014 飞鸟和蝉
秋败丝瓜胜良药
ChannelHandlerContext 提供 fire 系列方法用于事件传播
以 ChannelInboundHandlerAdapter 的 channelRead 方法为例,ChannelHandlerContext 会默认调用 fireChannelRead 方法将事件默认传递到下一个处理器。
如果重写了 ChannelInboundHandlerAdapter 的 channelRead 方法,并且没有调用 fireChannelRead 进行事件传播,那么表示此次事件传播已终止
第一页
上一页
下一页
最后一页