• Stars
    star
    263
  • Rank 155,624 (Top 4 %)
  • Language
    Go
  • License
    MIT License
  • Created over 4 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

High-performance timer implementation based on 5-level time wheel. 高性能定时器(5级时间轮,最小堆)[从零实现]

timer

Go codecov

timer是高性能定时器库

feature

  • 支持一次性定时器
  • 支持周期性定时器
  • 支持多种数据结构后端,最小堆,5级时间轮

一次性定时器

import (
    "github.com/antlabs/timer"
    "log"
)

func main() {
        tm := timer.NewTimer()

        tm.AfterFunc(1*time.Second, func() {
                log.Printf("after\n")
        })

        tm.AfterFunc(10*time.Second, func() {
                log.Printf("after\n")
        })
        tm.Run()
}

周期性定时器

import (
    "github.com/antlabs/timer"
    "log"
)

func main() {
        tm := timer.NewTimer()

        tm.ScheduleFunc(1*time.Second, func() {
                log.Printf("schedule\n")
        })

        tm.Run()
}

自定义周期性定时器

实现时间翻倍定时的例子

type curstomTest struct {
	count int
}
// 只要实现Next接口就行
func (c *curstomTest) Next(now time.Time) (rv time.Time) {
	rv = now.Add(time.Duration(c.count) * time.Millisecond * 10)
	c.count++
	return
}

func main() {
        tm := timer.NewTimer(timer.WithMinHeap())
        node := tm.CustomFunc(&curstomTest{count: 1}, func() {
                log.Printf("%v\n", time.Now())
        })
        tm.Run()
}

取消某一个定时器

import (
	"log"
	"time"

	"github.com/antlabs/timer"
)

func main() {

	tm := timer.NewTimer()

	// 只会打印2 time.Second
	tm.AfterFunc(2*time.Second, func() {
		log.Printf("2 time.Second")
	})

	// tk3 会被 tk3.Stop()函数调用取消掉
	tk3 := tm.AfterFunc(3*time.Second, func() {
		log.Printf("3 time.Second")
	})

	tk3.Stop() //取消tk3

	tm.Run()
}

选择不同的的数据结构

import (
    "github.com/antlabs/timer"
    "log"
)

func main() {
        tm := timer.NewTimer(timer.WithMinHeap())// 选择最小堆,默认时间轮
}

benchmark

github.com/antlabs/timer 性能最高

goos: linux
goarch: amd64
pkg: benchmark
Benchmark_antlabs_Timer_AddTimer/N-1m-16        	 9177537	       124 ns/op
Benchmark_antlabs_Timer_AddTimer/N-5m-16        	10152950	       128 ns/op
Benchmark_antlabs_Timer_AddTimer/N-10m-16       	 9955639	       127 ns/op
Benchmark_RussellLuo_Timingwheel_AddTimer/N-1m-16         	 5316916	       222 ns/op
Benchmark_RussellLuo_Timingwheel_AddTimer/N-5m-16         	 5848843	       218 ns/op
Benchmark_RussellLuo_Timingwheel_AddTimer/N-10m-16        	 5872621	       231 ns/op
Benchmark_ouqiang_Timewheel/N-1m-16                       	  720667	      1622 ns/op
Benchmark_ouqiang_Timewheel/N-5m-16                       	  807018	      1573 ns/op
Benchmark_ouqiang_Timewheel/N-10m-16                      	  666183	      1557 ns/op
Benchmark_Stdlib_AddTimer/N-1m-16                         	 8031864	       144 ns/op
Benchmark_Stdlib_AddTimer/N-5m-16                         	 8437442	       151 ns/op
Benchmark_Stdlib_AddTimer/N-10m-16                        	 8080659	       167 ns/op

More Repositories

1

strsim

Calculate string similarity library, integrate multiple algorithms on the back end。计算字符串相似度库,后端集成多种算法[从零实现]
Go
273
star
2

pcurl

pcurl是解析curl命令的库,弥补go生态链的一块空白[从零实现]
Go
123
star
3

quickws

高性能websocket库, Callback写法,在高频cpu上有不俗表现 https://github.com/antlabs/quickws-example
Go
96
star
4

pcopy

pcopy是深度拷贝库,相比上个版本(v0.0.10),性能提升4-10倍
Go
89
star
5

greatws

100w连接仅需500-700MB内存,针对海量连接特别优化的websocket库(kqueue, epoll),高性能,callback写法,在服务器cpu上有不俗表现 https://github.com/antlabs/greatws-example
Go
80
star
6

httparser

高性能http 1.1解析器,为你的异步io库插上http解析的翅膀, 每秒可以处理630.15MB/s流量[从零实现]
Go
41
star
7

gstl

快写完了....支持泛型的数据结构库(vec, linkedlist, skiplist, hashtable, btree, avltree, rbtree, trie, set
Go
26
star
8

tostruct

Generate struct definition according to json/yaml/query string/http header string @^^@ 根据json/yaml/query string/http header字符串生成struct[从零实现]
Go
16
star
9

cronex

高性能cron库,crontab语法默认支持到秒级
Go
9
star
10

mock

生成mock数据
Go
7
star
11

gout-middleware

gout中间件
Go
6
star
12

brouter

高性能http router库,API风格类似httprouter,比1.3.0的httprouter快50-60%的样子,比开发版本的httprouter慢一点,大约是 92-95%的性能。[从零实现]
Go
5
star
13

h2o

脚手架工具,统一的dsl,方便生成一些代码(1. 配置生成http client/server代码 2. 从json/yaml生成结构体定义 3. 生成grpc protobuf)
Go
5
star
14

cat

golang实现的cat命令(所有功能),也可以看成https://github.com/guonaihong/clop 的使用示例
Go
2
star
15

greatws-example

greatws的example
Go
1
star
16

stl

纯c风格实现的高性能数据结构
Go
1
star
17

deepcopy

存放原deepcoppy v0.0.10版本的代码
Go
1
star
18

wsutil

websocket的工具函数
Go
1
star
19

quickws-example

quickws的example代码
Go
1
star
20

easychan

对于chan使用场景,总结与收集好用的工具函数
Go
1
star