gf/g/os/gwheel/gwheel_z_bench_test.go

58 lines
1.6 KiB
Go
Raw Normal View History

2018-12-30 11:08:07 +08:00
// Copyright 2019 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://gitee.com/johng/gf.
2019-01-01 19:43:31 +08:00
package gwheel_test
2018-12-30 11:08:07 +08:00
import (
2019-01-06 11:09:50 +08:00
"gitee.com/johng/gf/g/container/gtype"
2019-01-01 19:43:31 +08:00
"gitee.com/johng/gf/g/os/gwheel"
2018-12-30 11:08:07 +08:00
"testing"
2019-01-03 19:11:54 +08:00
"time"
2018-12-30 11:08:07 +08:00
)
2019-01-06 11:09:50 +08:00
var (
nowNanoseconds = time.Now().UnixNano()
entryUpdate = gtype.NewInt64()
entryStatus = gtype.NewInt(gwheel.STATUS_RUNNING)
entryTimes = gtype.NewInt(-1)
entryInterval = int64(0)
entryIsSingleton = gtype.NewBool()
)
2018-12-30 11:08:07 +08:00
func Benchmark_Add(b *testing.B) {
for i := 0; i < b.N; i++ {
2018-12-30 14:53:16 +08:00
// 基准测试的时候不能设置为1秒否则大量的任务会崩掉系统
2019-01-03 19:11:54 +08:00
gwheel.Add(time.Hour, func() {
2018-12-30 11:08:07 +08:00
})
}
}
2019-01-06 11:09:50 +08:00
// 测试最坏情况的任务检测开销
func Benchmark_RunnableCheck(b *testing.B) {
for i := 0; i < b.N; i++ {
if nowNanoseconds - entryUpdate.Val() >= entryInterval {
// 是否关闭
if entryStatus.Val() == gwheel.STATUS_CLOSED {
continue
}
// 是否单例
if entryIsSingleton.Val() {
if entryStatus.Set(gwheel.STATUS_RUNNING) == gwheel.STATUS_RUNNING {
continue
}
}
// 次数限制
if entryTimes.Add(-1) == 0 {
if entryStatus.Set(gwheel.STATUS_CLOSED) == gwheel.STATUS_CLOSED {
continue
}
}
entryUpdate.Set(nowNanoseconds)
}
}
}