美文网首页
GOMAXPROCS的使用

GOMAXPROCS的使用

作者: 天地一小儒 | 来源:发表于2020-03-05 11:06 被阅读0次
    1. GOMAXPROCS的作用是控制你的程序最大能跑满几个逻辑CPU,也就是通常我们说的几核几核
    2. 默认情况下GOMAXPROCS的值就是NumCPU()的值
    3. 程序中设置了GOMAXPROCS的值后,此后的所有程序都会被限制在这个值内,所以,要想单独控制某段程序的负载,请设置完后,再设置回来。如下测试案例,SleepWait控制最多使用一半的cpu,我的虚拟机是6核,所以cpu轻松跑到300%,10秒过后,如果我不把Test_GOMAXPROCS注释的那段放开,主程序也会最大负载300%
    4. 当程序已经有协程阻塞时,runtime.GOMAXPROCS(runtime.NumCPU())会被阻塞,直到所有协程都无阻塞。
    func Test_GOMAXPROCS(t *testing.T) {
        SleepWait(10 * time.Second)
        fmt.Println("???")
        // result := runtime.GOMAXPROCS(runtime.NumCPU())
        // fmt.Println("result", result)
        for i := 0; i < 8; i++ {
            go func() {
                for {
                }
            }()
        }
        select {}
    }
    
    func SleepWait(duration time.Duration) {
        fmt.Println("?")
        result := runtime.GOMAXPROCS(runtime.NumCPU() / 2)
        fmt.Println("result", result)
        done := make(chan bool)
        for i := 0; i < 8; i++ {
            go func() {
                defer fmt.Println("!!")
                for {
                    select {
                    case <-done:
                        return
                    default:
                    }
                }
            }()
        }
        fmt.Println("duration:", duration)
        <-time.After(duration)
        close(done)
        fmt.Println("??")
    }
    

    相关文章

      网友评论

          本文标题:GOMAXPROCS的使用

          本文链接:https://www.haomeiwen.com/subject/tlptrhtx.html