3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
沒有必要有一個(gè)忙循環(huán),除了消耗 CPU 時(shí)間之外什么都不做。它不僅消耗了整個(gè) OS 線程,而且 goroutines 是協(xié)作調(diào)度的,它會(huì)干擾運(yùn)行時(shí)的 goroutines。例如,在 Go1.5 上,這通常會(huì)阻止 GC 的 stop-the-world 階段(您可以通過設(shè)置來測試GOGC=off)。
為了讓這個(gè)程序運(yùn)行,你可以在 for 循環(huán)中插入一個(gè)調(diào)度點(diǎn),但最好將它完全刪除。
func forever() {
for {
runtime.Gosched()
}
}

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
從代碼來看,您似乎想在 go 例程中的 for 循環(huán)中打印數(shù)字。在這種情況下,為什么不使用 channel 來指示 goroutine 何時(shí)通過 for 循環(huán)完成并相應(yīng)地退出 main 函數(shù)。像這樣的東西
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貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
很好用runtime.Gosched()
。但是在 golang 中,time.Duration 以納秒為單位,所以 time.Sleep(1000) 幾乎沒有睡眠。大多數(shù)情況下,您將其視為 Java 中的毫秒。你可以試試
time.Sleep( 1000 * time.MilliSecond )
- 3 回答
- 0 關(guān)注
- 255 瀏覽
添加回答
舉報(bào)