`
biocy
  • 浏览: 34350 次
  • 性别: 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.7z

    1080p/720p timing

    video 1080p 720p hsync vsync pixel timing

    IDBLK_TIMING大全

    IDBLK_TIMING大全,各个版本的IDBLK_TIMING

    timing designer9.1 part1

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

    DDR3 timing simulation

    DDR3 timing simulation

    timing deseigner9.1 part2

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

    timingdesigner指导说明书.zip

    timingdesigner是一款非常实用的波形图时序图绘制软件,文件夹内含timingdesigner软件的详细使用说明书,几百页,非常实用

    timing designer9.1 part6

    timing designer9.1 part6

    timing designer9.1 part7

    timing designer9.1 part7

    Timing designer9.1安装步骤

    Timing designer9.1安装步骤

    timing designer9,1

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

    Timingdesigner_92.part3

    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)安装...

    Timing designer users guid

    Timing designer users guid

    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)安装...

    gmii timing and electrical specification

    gmii timing and electrical spec

    I2C_Timing_Configuration_V1.0.0 说明书

    I2C_Timing_Configuration_V1.0.0 配套说明书,用来配置stm32F0 F3系列I2C timing,按照说明书配置,很简单

    EMA.TimingDesigner.v9.1.Retail-ZWT

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

    Timing And Patterns

    developing a set of formats, timing sets and a pattern from a timing diagram and timing table. The device used is a simple SRAM memory device with a multiplexed bus. It has 16 memory locations ...

Global site tag (gtag.js) - Google Analytics