关于去程go关键字的使用问题

gs272 · · 5969 次点击
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
更多评论
polaris
社区,需要你我一同完善!
你在main函数开始处加上:`runtime.GOMAXPROCS(runtime.NumCPU())` 目前goroutine的调度实现的比较简单,堵塞时才会执行调度。 另外,你是看到《云动力》那本书上说:去程吧。还是直接叫goroutine吧,去程听着好别扭。呵呵
#1
polaris
社区,需要你我一同完善!
至少我这边是可以。但你要知道,并发程序的结果是不可以预测的,你可以试试将Sleep的时间放长,应该会看到效果。 `runtime.GOMAXPROCS(runtime.NumCPU())` 是利用当前机器的CPU核数,允许有多少个goroutine并行。你可以打印 `runtime.NumCPU()` 的结果看看,看你的机器是几核的。
#3