自 Go 1.5开始, Go的GOMAXPROCS默认值已经设置为 CPU的核数 如果在一个核上面执行的话,可以通过Gosched主动让出执行权,如下

package main

import (
    "fmt"
    "runtime"
    "sync"
)

const N = 26

func main() {
    const GOMAXPROCS = 1
    runtime.GOMAXPROCS(GOMAXPROCS)

    var wg sync.WaitGroup
    wg.Add(2 * N)
    for i := 0; i < N; i++ {
        go func(i int) {
            defer wg.Done()
            runtime.Gosched()
            fmt.Printf("%c", 'a'+i)
        }(i)
        go func(i int) {
            defer wg.Done()
            fmt.Printf("%c", 'A'+i)
        }(i)
    }
    wg.Wait()
}

执行结果如下

ZABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz

这样看到大小写字母是分开显示的,如果是多核的情况下,执行就不可控制了。

results matching ""

    No results matching ""