为什么睡眠似乎不适用于goroutine

时间:2014-07-22 13:57:44

标签: time go sleep goroutine

package main

import (
    "fmt"
    "time"
)

func main() {
    c := make(chan struct{})
    count := 1
    go func() {
        for {
            fmt.Println("foo", count)
            count++
            time.Sleep(2)
        }
        c <- struct{}{}
    }()
    fmt.Println("Hello World!")
    <-c
}

这是我的代码,我发现每次循环都没有睡2,而且很快打印出来。它的原因是什么?我搜索的是睡眠会让goroutine放弃对cpu的控制,当它再次获得控制权时它会检查自己是在睡觉吗?

1 个答案:

答案 0 :(得分:8)

time.Sleep以纳秒为单位Duration,所以要延迟2秒;

time.Sleep(2000000000)    

或者,正如@ Ainar-G在评论中指出的那样,可读性更高;

time.Sleep(2 * time.Second)