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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|