我当然想学习Golang。我知道并行性和并发性之间的区别。我基本上寻找如何做伟大的并行性。我期待goroutines允许我以某种方式做到这一点。但是,看起来好像1.5 GOMAXPROCS设置为核心数。这是否意味着因为1.5 goroutines基本上是平行的!?
我在像StackOverflow这样的网站上研究的每个问题都已经过时了,并没有考虑到1.5的变化。见:Parallel processing in golang
运行以下代码并不能实现Go 1.10中的并行性:https://play.golang.org/p/24XCgOf0jy5
将GOMAXPROCS设置为2不会更改输出,纯粹是并发而不是并行。
编辑:我在FX-6300上运行它。
编辑2:尽管这个问题得到了充分的回答,但我认为(并非完美)问题却是正确的,我将假设它缺乏基于downvotes的上下文。
如果有人遇到这个问题,以备将来参考:
Go Playground是一个单处理器虚拟机。你正在经营一个琐碎的goroutine。玩具机上运行的玩具程序可以获得玩具效果。
在多CPU机器上运行:
package main
import (
"fmt"
"runtime"
"sync"
)
var wg sync.WaitGroup
func count() {
defer wg.Done()
for i := 0; i < 10; i++ {
fmt.Println(i)
i := 0
for ; i < 1e6; i++ {
}
_ = i
}
}
func main() {
fmt.Println("Version", runtime.Version())
fmt.Println("NumCPU", runtime.NumCPU())
fmt.Println("GOMAXPROCS", runtime.GOMAXPROCS(0))
wg.Add(2)
go count()
go count()
wg.Wait()
}
输出:
Version go1.10
NumCPU 8
GOMAXPROCS 8
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9