go语言开发基础42 - 之go语言里的定时器使用
go语言里的time包里有两个方法实现了定时器和一次性定时器,具体看下面例子:
一、间隔指定时长重复执行定时器示例
package main import ( "fmt" "time" "runtime" ) // 定时器一:间隔指定时间执行一次(定时器就是通过channel实现的) func main() { t := time.NewTicker(time.Second*3) // 间隔:{time.NewTicker(这里设置的时长)} 执行一次 for v := range t.C { // t.C是一个channel Time类型的管道,每隔设置的时长就会有一个线程往管道里写入时间类型的数据 fmt.Println("hello ",v) } t.Stop() // 关闭定时器,防止内存泄漏(如果定时器不关闭会造成内存泄漏) } // 执行结果为: hello 2020-08-05 18:02:09.1644539 +0800 CST m=+3.004128801 hello 2020-08-05 18:02:12.1652237 +0800 CST m=+6.004879001 hello 2020-08-05 18:02:15.1649615 +0800 CST m=+9.004597201
二、一次性定时器示例
一次性定时器(After性能不好,官方不推荐使用,还容易造成内存泄漏)
package main import ( "fmt" "time" "runtime" ) func main() { num := runtime.NumCPU() // 获取cpu数量 runtime.GOMAXPROCS(num - 1) // 绑定cpu总数量-1个的cpu上跑 select { case <- time.After(time.Second*5): // 没有关闭定时器,可能造成内存泄漏 fmt.Println("after") } }

浙公网安备 33010602011771号