公司网站建设费用多少,万网 网站建设合同,石家庄网站外包公司,网站建设的售后服务流程介绍#xff1a;为了充分了利用多cpu的优势#xff0c;在Golang程序中#xff0c;设置运行的cpu数目。
func main() {//获取系统当前cpu的数量num : runtime.NumCPU()//这里根据需求来设置整个go程序去使用几个cpuruntime.GOMAXPROCS(num)fmt.Println(num , nu…介绍为了充分了利用多cpu的优势在Golang程序中设置运行的cpu数目。
func main() {//获取系统当前cpu的数量num : runtime.NumCPU()//这里根据需求来设置整个go程序去使用几个cpuruntime.GOMAXPROCS(num)fmt.Println(num , num)
}
比如你有逻辑的4个cpu但是在程序里面只想使用3个。另外一个我要保留下来给其他程序使用因为你占满了cpu导致其他程序可能跑不起来了。
1go1.8后默认让程序运行在多个核上可以不用设置了 2go1.8前还是要设置一下可以更高效的利益cpu channel(管道)-看个需求 需求现在要计算1-200的各个数的阶乘并且把各个数的阶乘放入到map中。最后显示出来。要求使用goroutine完成
分析思路 1)使用goroutine来完成效率高但是会出现并发/并行安全问题. 2)这里就提出了不同goroutine如何通信的问题 代码实现 1)使用goroutine来完成(看看使用gorotine并发完成会出现什么问题?然后我们会去解决) 2)在运行某个程序时如何知道是否存在资源竞争问题。方法很简单在编译该程序时增加一个参数-race即可[示意图] package mainimport (fmttime
)var (m make(map[int]int, 10)
)// test函数就是计算n的阶乘
func test(n int) {res : 1for i : 1; i n; i {res res * i}//将计算结果放到map当中m[n] res
}func main() {//这里开启多协程完成任务for i : 1; i 100; i {go test(i)}time.Sleep(time.Second * 10)for k, v : range m {fmt.Println(k, v)}
} fatal error: concurrent map writes 多个协程在同时操作同一块的map空间。 WARNING: DATA RACE
Write at 0x00c00013e480 by goroutine 8:runtime.mapassign_fast64()D:/Go/src/runtime/map_fast64.go:93 0x0main.test()C:/Users/W10/GolandProjects/goroutine/channel.go:19 0x70main.main.func1()C:/Users/W10/GolandProjects/goroutine/channel.go:25 0x39Previous write at 0x00c00013e480 by goroutine 7:main.main()C:/Users/W10/GolandProjects/goroutine/channel.go:25 0x84Goroutine 7 (finished) created at:main.main()C:/Users/W10/GolandProjects/goroutine/channel.go:25 0x84Found 2 data race(s)
可以看到有几个数据发生竞争关系。