package main
import (
"fmt"
"time"
)
func main() {
go sheep(1)
go sheep(2)
time.Sleep(time.Millisecond)
}
func sheep(i int) {
for ; ; i += 2 {
fmt.Println(i, "只羊")
}
}
上面是关于去程的一个简单程序,结果应该是输出顺序的整数,但我只能输出奇数,这是什么原因啊?
我将Sleep的时间改为`time.Sleep(time.Second)`,看到了奇数和偶数显示,但是极不规律,跟书上说的差太远,不过总算有效果。
我的电脑是core i3双核,打印`runtime.NumCPU()`,显示是4?这是怎么回事?
#4
更多评论
你在main函数开始处加上:`runtime.GOMAXPROCS(runtime.NumCPU())`
目前goroutine的调度实现的比较简单,堵塞时才会执行调度。
另外,你是看到《云动力》那本书上说:去程吧。还是直接叫goroutine吧,去程听着好别扭。呵呵
#1
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
go sheep(1)
go sheep(2)
time.Sleep(time.Millisecond)
}
func sheep(i int) {
for ; ; i += 2 {
fmt.Println(i, "只羊")
}
}
这样?还是不行,`runtime.GOMAXPROCS(runtime.NumCPU())`这句是什么意思啊?是不是根据cpu数量决定类似线程的数量?
确实是看了云动力这本书,就买了这本go的书,看着还行,尽量在专有名词上跟大家接轨。呵呵!
#2