并行处理加快了处理速度:
import (
"fmt"
"runtime"
"sync"
"time"
)
func test(n int, wg *sync.WaitGroup) {
x := 0
for i := 0; i < 1000000000; i++ {
x += i
}
wg.Done()
}
func main() {
tim1 := time.Now().UnixNano()
runtime.GOMAXPROCS(8) //设置cpu的核的数量,从而实现高并发
var wg sync.WaitGroup
wg.Add(10)
for i := 0; i < 10; i++ {
go test(i, &wg)
}
wg.Wait()
tim2 := time.Now().UnixNano()
fmt.Println("main ok", (tim2-tim1)/1e6)
}
因为加入了抢占式的调度方式,以下代码并不会出现死循环:
package main
import (
"fmt"
"runtime"
_ "time"
)
var (
flag2 = false
str string
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
//time.Sleep(1 * time.Second)
flag2 = true
str = "setup complete!"
}()
for {
//fmt.Println("for")
if flag2 {
break
}
}
fmt.Println(str)
}
并行处理方面的资料很多,下面几篇文章觉得还不错:
golang语言并发与并行——goroutine和channel的详细理解(一)_思维的深度的博客-CSDN博客_golang goroutine
golang多核设置 - Go语言中文网 - Golang中文社区