123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package main
- import (
- "flag"
- "fmt"
- "log"
- "runtime"
- "strconv"
- "time"
- "github.com/tal-tech/go-zero/core/cmdline"
- "github.com/tal-tech/go-zero/core/collection"
- "github.com/tal-tech/go-zero/core/proc"
- )
- const numItems = 1000000
- var round = flag.Int("r", 3, "rounds to go")
- func main() {
- defer proc.StartProfile().Stop()
- flag.Parse()
- fmt.Println(getMemUsage())
- for i := 0; i < *round; i++ {
- do()
- }
- cmdline.EnterToContinue()
- }
- func do() {
- tw, err := collection.NewTimingWheel(time.Second, 100, execute)
- if err != nil {
- log.Fatal(err)
- }
- for i := 0; i < numItems; i++ {
- key := strconv.Itoa(i)
- tw.SetTimer(key, key, time.Second*5)
- }
- fmt.Println(getMemUsage())
- }
- func execute(k, v interface{}) {
- }
- func getMemUsage() string {
- runtime.GC()
- var m runtime.MemStats
- runtime.ReadMemStats(&m)
- // For more info, see: https://golang.org/pkg/runtime/#MemStats
- return fmt.Sprintf("Heap Alloc = %dMiB", toMiB(m.HeapAlloc))
- }
- func toMiB(b uint64) uint64 {
- return b / 1024 / 1024
- }
|