`
biocy
  • 浏览: 34832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Timing Wheel 简单实现

    博客分类:
  • java
 
阅读更多

在实际需求中总是会有一些定时释放资源的场景,比如各种长链接、带有业务上限时的实体等等。

TimingWheel算法可以说是有很广的应用了,各种实现版本对应不同场景。结构如图所示:

 

关于算法的介绍可参考以下两个地址:

http://www.360doc.com/content/12/0917/07/7775902_236502748.shtml

http://blog.csdn.net/mindfloating/article/details/8033340

第二个链接的csdn博主有一个实例分享,代码简单易懂。

 

我有两个问题,这个实现是没有解决的:

1. Wheel转动一次的时间间隔是可以通过参数传递来定义的,比如说一个小时。那么我在1:00启动这个TimingWheel,在1:30添加进一个新元素。其实我是希望在11:30的时候释放掉,但是结果会怎么样,会比预想的时间提前30分钟。这就是同一槽内的元素,释放时间是一样的,根据添加时间的不同,有效期会有偏差。Wheel转动越慢,偏差就越大。

2. Wheel的转动应该与元素释放无关,也就是释放元素的操作是异步执行。避免单个元素释放时延导致整个Wheel都在等待。

3. Wheel应该有状态,保证每一个添加进来的元素都可以被正确释放。不应该Wheel调用shutdown了,元素不再做任何处理。(其实这里应该有点争议,是否shutdown后全部释放,还要根据场景需要进行调整。衡量释放处理是CPU密集型还是IO密集型,压力过大导致什么样的结果)

 

 

下面是小弟的实现,还有不成熟的地方请多指教。

 

 

先介绍一下每个类:

Wheel.java    时间轮

WheelState.java   时间轮状态

Slot.java    轮槽

Clocker.java    时间轮的推动器。每秒钟推动一次Wheel,并把过期槽内的元素都转移到释放池中。

RealeasePool.java    释放池。里面是一个阻塞队列,凡是进入这里的元素都会被释放掉

ExpirationIntecepter.java   释放方法接口

 

 

 

 

 

分享到:
评论

相关推荐

    Timing Designer时序图绘制工具

    TimingDesigner新的项目管理器简化了时序信息交换,使用户能更有效地管理高性能接口的规范和分析,实现数字IC和电路板设计工作。该工具现在已允许用户在同一个项目内排列多个图表组元。组元和模块可以在单个树状...

    TimingDesigner 9.103.7z

    《TimingDesigner 9.103:深入了解时序设计软件》 TimingDesigner 9.103是一款专业级的时序设计软件,广泛应用于集成电路(IC)设计领域,特别是数字集成电路设计中的时序分析和优化。它为工程师们提供了一个强大而...

    IDBLK_TIMING大全

    通过压缩包中的文件名列表"IDBLK_TIMING",我们可以推测这些文件可能是详细的规格说明、测试报告、配置文件或者是代码实现。深入研究这些文件将帮助我们理解每个版本的特性、变化以及如何在实际项目中应用它们。 总...

    Synopsys_Timing_Constraints_and_Optimization_User_Guide.pdf

    Synopsys Timing Constraints and Optimization User Guide Timing Constraints(时序约束)是数字集成电路设计中的一种重要技术,用于描述和约束数字电路的时序行为。 Synopsys Timing Constraints and ...

    timingdesigner9.2

    7. **兼容性与接口**:TimingDesigner 通常与主流的 FPGA 厂商(如Xilinx、Intel、Lattice)的开发工具链集成,通过VHDL、Verilog等硬件描述语言接口,实现设计的无缝导入和导出。 8. **学习曲线**:尽管 Timing...

    timingdesigner指导说明书.zip

    timingdesigner是一款强大的时序图绘制工具,它的易用性和丰富的功能使得复杂时序关系的呈现变得简单。配合详尽的指导说明书,无论是初学者还是专业人士,都能得心应手地使用。掌握好这款工具,无疑会提升你的软件...

    TimingDesigner 9.103.zip

    TimingDesigner 提供了强大的时序约束管理工具,使得设定和修改约束变得简单,从而确保设计满足时序目标。 3. **时序仿真和分析**:通过内置的仿真引擎,TimingDesigner 可以模拟电路在实际工作条件下的时序行为,...

    Timingdesigner_92

    时序图绘制 Timingdesigner_92版本,内部附有破解文件。

    VESA Timing 计算公式

    VESA Timing 计算工具 非常清晰实用 对Monitor开发人员很有用

    VESA Timing.zip_CVT_VESA_VESA timing_vesa CVT 算法_计算器

    这个"VESA Timing.zip_CVT_VESA_VESA timing_vesa CVT 算法_计算器"压缩包文件包含了与VESA CVT相关的计算工具,便于用户根据特定的分辨率和刷新率获取所需的时序参数。 VESA CVT算法的核心是计算显示器的垂直同步...

    VGA-timing.rar_VGA timing_timing_vga

    本资料"VGA-timing.rar"包含了一份关于VGA时序的深入分析,是初学者进入VGA测试领域的宝贵资源。 首先,我们要理解VGA时序的基本概念。VGA时序主要包括行同步信号(Horizontal Sync)、场同步信号(Vertical Sync)...

    TimingDesigner 9.2

    通过这样的集成工具链,可以实现从设计输入到物理实现的高效流程。对于文件名“ead2ba03d38f4f7aade1368492cf2b11”,这可能是该软件的某一部分或者安装程序,具体的用途需要在解压缩后才能确定。总的来说,Timing...

    andytiming波形图软件

    在andytiming中,这些波形的绘制简单直观,大大简化了时序图的制作过程。 尽管andytiming软件不能直接绘制正弦波,但在数字信号表示中,正弦波通常不是必需的,因为数字系统处理的是离散的、非连续的信号,而方波和...

    TimingDesigner 9.103.rar

    TimingDesigner 9.103 是一款专业的时序图绘制工具,专为FPGA(现场可编程门阵列)和DSP(数字信号处理器)等领域的开发者设计。在电子工程和计算机系统设计中,时序图是至关重要的,因为它能够清晰地描绘出不同组件...

    画波形工具AndyTiming.zip

    对于高级用户,AndyTiming还支持通过脚本语言自定义更复杂的操作,实现自动化处理。此外,定期更新的版本会引入新的功能和性能改进,确保软件始终保持在行业的前沿。 总之,AndyTiming作为一款高效实用的波形绘制...

    timing designer9.1 part1

    时序工具Timingdesigner通过简单的操作,形象的绘制出需要的时序图,方便我们工程师去定义和计算相关时序,体现在如下方面: 1: 在设计系统前,预先设计时序架构图 把头脑中的时序关系通过软件来形象的描绘出来。...

    画波形图软件 AndyTiming

    《AndyTiming:绘制波形图的专业利器》 在信息技术领域,数据可视化是至关重要的,它能够帮助我们更直观地理解复杂的数据和现象。而在众多的数据图表中,波形图因其独特的展示方式,常用于表示时间序列数据,如声音...

    画时序图的工具TimingDesigner_v9.2_win.rar

    TimingDesigner_v9.2_win是一个专为绘制时序图而设计的小型工具,适用于Windows操作系统。 时序图的主要元素包括: 1. **参与者(Actor)**:代表与系统交互的外部实体,如用户、硬件设备或其他系统。 2. **对象...

    Timingdesigner_92.part1

    1)解压“TimingDesigner_v9.2_win.zip”后有两个文件:“td.win32.td92.exe”和“TDlic.dat”; 2)安装“td.win32.td92.exe”到C盘或D盘,此处选择安装目录为“D:\Program Files\EMA\TimingDesigner”为例; 3)安装...

Global site tag (gtag.js) - Google Analytics