编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Golang并发编程,常用的3种延迟操作,你可不能只会time.sleep

wxchong 2024-07-25 13:33:07 开源技术 22 ℃ 0 评论

1、time.Sleep的作用是程序阻塞,延迟操作。

func func1() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
	time.Sleep(time.Second * 2)
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

2、time.NewTimer定义定时器,程序阻塞,延迟操作。

time.NewTimer的原理是:

(1)提供一个channel;

(2)在定时时间到达之前,没有数据写入timer.C会一直阻塞;

(3)当定时时间到了,向channel写入值,阻塞解除;

(4)之后也可以从中读取数据。

func func2() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
	timer := time.NewTimer(time.Second * 3)
	t := <-timer.C
	fmt.Println(t)
}

3、time.After的原理与time.NewTimer相似,作用也是程序阻塞,延迟操作。

func func3() {
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
	<-time.After(time.Second * 2)
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表