Netty HashedWheelTimer
阅读数:185 评论数:0
跳转到新版页面分类
python/Java
正文
Netty中的HashedWheelTimer可以用于提交延迟任务,Java里的Time组件也具备相同的功能,不过Time是基于执行是基于优先队列实现的,相当于需要对所有的任务基于执行的时间排个序。而HashedWheelTimer是另一种思想,预先放置一定数量的任务槽,任务提交时,根据延迟时间放入对应的槽位。工作线程利用sleep模拟tick,将到达的槽位里的任务取出,依次执行。
使用
public static void main(String args[]) {
// 第一个参数表示时间轮走一个花费的时间,参数二表示时间单位,参数三表示一轮总共多少格
HashedWheelTimer timer = new HashedWheelTimer(1, TimeUnit.SECONDS, 100);
timer.start();
TimerTask task = new TimerTask() {
@Override
public void run(Timeout timeout) throws Exception {
System.out.println("任务执行");
}
};
// 延迟3秒后执行
timer.newTimeout(task, 3, TimeUnit.SECONDS);
// 延迟4秒后执行
timer.newTimeout(task, 4, TimeUnit.SECONDS);
}
请注意,HashedWheelTimer
不保证任务准时执行,任务可能会因为时间轮的tick时长而有一些延迟。此外,如果有大量的任务在同一个tick到期,它们会在一个tick内连续执行,这可能会导致短暂的高负载。
在使用 HashedWheelTimer
时,你应该确保合理地使用资源,避免创建过多的实例,因为每个 HashedWheelTimer
都会创建它自己的线程来处理任务。如果你的应用程序需要创建多个定时器,可能需要考虑其他的调度策略或资源共享。
相关推荐
Java NIO根据操作系统不同,比如macosx是KQueueSelectorProvider、windows有WindowsSelectorProvider、Linux有EPollSelec
Netty提供了丰富的解码器抽象基类:主要分为两类:
(1)解码字节到消息(ByteToMessageDecoder和ReplayingDecoder)
(2)解码消
一、概述
Netty的强大的地方,是他能方便的实现自定义协议的网络传输。Netty基于Reactor模式:http://1024s.top/mbstudy/mbBlog/blogDetail?blog
一、概述
在计算机中,我们以字节为单位,一个字节为8bit。
而数据存储中的字节顺序多取决于硬件设计,即所谓的大端存储和小端存储。Intel处理器使用小端存储,PowerPc的处理器采用大端存储。
当
ByteBuf是对字节的封装,有基于堆内存和直接内存。若是堆内存,应用程序无需考虑什么时候释放,因为GC是帮助做,如果是直接内存,那么需要主动释放。
每个ByteBuf对象都有一个引用计数,当这个数值
一、netty客户端流控
1、这几种情况下,如果客户端没有流控保护,很容易发生内存泄露。
(1)网络瓶颈,当客户端发送速度超过网络链路处理能力,会导致客户端发送队列积压。
(2)当对端读取速度小于已方
LineBasedFrameDecoder以换行符\n或\r\n作为依据,遇到\r\n都认为是一条完整的消息。
而DelimiterBasedFrameDecoder允许我们指定任
HttpServerCodec
HtttpServerCodec只能处理像http get的请求,也就是数据带在url问号后面的http请求。
GET请求包括两部