首页 > 文章列表 > time.Sleep 会阻塞 goroutine 吗?

time.Sleep 会阻塞 goroutine 吗?

golang
122 2023-04-24

问题内容

time.Sleep 会阻塞 goroutine 吗?

正确答案

是的,time.Sleep会阻塞当前的 goroutine。

当调用time.Sleep时,当前的 goroutine 会暂停执行,直到经过指定的时间或被中断。在此期间,该 goroutine 不会执行任何代码,因此它被认为是被阻塞的。

需要注意的是,time.Sleep只会阻塞当前的 goroutine。如果您的程序中有其他 goroutine 在运行,则它们不受此操作的影响,仍然可以继续执行。

以下是一个简单的示例,演示了如何使用time.Sleep来阻塞当前的 goroutine:

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("start")

	time.Sleep(1 * time.Second)

	fmt.Println("end")
}

在上面的示例中,我们在调用time.Sleep之前打印了一条消息,然后调用time.Sleep来阻塞当前的 goroutine,等待1秒钟。最后,我们打印了另一条消息。运行此程序将输出以下内容:

start
end

可以看到,在调用time.Sleep期间,程序暂停了1秒钟,但其他 goroutine(如果有的话)仍然可以继续执行。