3 回答
TA贡献1780条经验 获得超1个赞
没有必要有一个忙循环,除了消耗 CPU 时间之外什么都不做。它不仅消耗了整个 OS 线程,而且 goroutines 是协作调度的,它会干扰运行时的 goroutines。例如,在 Go1.5 上,这通常会阻止 GC 的 stop-the-world 阶段(您可以通过设置来测试GOGC=off)。
为了让这个程序运行,你可以在 for 循环中插入一个调度点,但最好将它完全删除。
func forever() {
for {
runtime.Gosched()
}
}
TA贡献1818条经验 获得超11个赞
从代码来看,您似乎想在 go 例程中的 for 循环中打印数字。在这种情况下,为什么不使用 channel 来指示 goroutine 何时通过 for 循环完成并相应地退出 main 函数。像这样的东西
package main
import "fmt"
import "runtime"
import "time"
func show(result chan bool) {
for number := 1; number < 999999; number++ {
time.Sleep(1000)
fmt.Println(number)
}
result <- true
}
func main() {
runtime.GOMAXPROCS(2)
result := make(chan bool)
go show(result)
<- result
}
TA贡献1854条经验 获得超8个赞
很好用runtime.Gosched()
。但是在 golang 中,time.Duration 以纳秒为单位,所以 time.Sleep(1000) 几乎没有睡眠。大多数情况下,您将其视为 Java 中的毫秒。你可以试试
time.Sleep( 1000 * time.MilliSecond )
- 3 回答
- 0 关注
- 212 浏览
添加回答
举报