go语言实现的真正的多层时间轮

smally84 · · 2216 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# timewheel > 时间轮,是一种实现延迟功能(定时器)的巧妙算法,在 Netty,Zookeeper,Kafka 等各种框架中,甚至 Linux 内核中都有用到。 #### 安装 `go get -u -v github.com/itmisx/timewheel` #### 使用 ```go // 直接函数调用 { // 启动时间轮 // 参数-func(interface{}) timewheel.Start(callback) // timerID,定时器id,用来删除定时器 // 参数1-string,定时器id,相同的定时器id会覆盖旧的定时器 // 参数2-time.Duration,定时器间隔 // 参数3-interface{},定时器数据,将传递到回调函数 timewheel.AddTimer("timerID", time.Second*3, "data") // 停止定时器 // 参数-string,定时器的id timewheel.StopTimer("timerID") timewheel.Stop() } // 结构体方法调用 { // 参数1-time.Duration,时间轮精度 // 参数2-int,时间槽数量 // 参数3-func(interface{}),定时器过期回调函数 tw := timewheel.New(time.Second, 60, callback) tw.Start() // timerID,定时器id,用来删除定时器 // 参数1-string,定时器id,相同的定时器id会覆盖旧的定时器 // 参数2-time.Duration,定时器间隔 // 参数3-interface{},定时器数据,将传递到回调函数 tw.AddTimer("timerID", time.Second*3, "data") tw.Stop() } ``` #### Benchmark ``` goos: darwin goarch: amd64 pkg: 192.168.1.75/go-pkg/timewheel cpu: Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz BenchmarkTimeWheel-4 1000000 1550 ns/op ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2216 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传