Go语言中Goroutine的设置方式

一、 通过runtime包进行多核设置 1 NumCPU()获取当前系统的cpu核数 2 GOMAXPROCS设置当前程序运行时占用的cpu核数 版本1 6之前

一、 通过runtime包进行多核设置

1.NumCPU()获取当前系统的cpu核数

2.GOMAXPROCS设置当前程序运行时占用的cpu核数

版本1.6之前默认是使用1个核,而之后是全部使用。

好玩的程序:

func doSomething() {
    var i int
    for {
        i++
    }
}

func main() {

    cpu := runtime.NumCPU()
    fmt.Println("本机cpu核数:", cpu)

    fmt.Println("输入模拟的cpu数:")
    reader := bufio.NewReader(os.Stdin)
    buf, _ := reader.ReadBytes('\n')
    cmdStr := (string)(buf)
    num, err := strconv.Atoi(strings.Trim(cmdStr, "\r\n"))

    if err != nil || num > cpu || num <= 0 {
        fmt.Println("输入的数字不正确 err:{0}", err)
        return
    }

    //设置核数
    runtime.GOMAXPROCS(num)

    for i := 0; i < 10; i++ {
        //做个死循环
        go doSomething()
    }

    fmt.Println("程序已经开始执行")

    time.Sleep(time.Second * 30)

    for j := 5; j > 0; j-- {
        fmt.Printf("程序倒计时退出: %ds...\n", j)
        time.Sleep(time.Second)
    }
    fmt.Printf("程序退出")
}

我的电脑是8核的,分别运行1 2 4 8,看下cpu的使用率:

图一 未开始运行

图二 运行1个cpu

图三 运行2个cpu

图四 运行4个cpu

图五 运行8个cpu

二、Goroutine的调度原理复习

之前的记录 Go语言中并发的工作原理

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对好代码网的支持。如果你想了解更多相关内容请查看下面相关链接

您可能有感兴趣的文章
golang并发编程的如何实现

golang如何实现redis的延时消息队列功能示例

golang中range在slice和map遍历中的注意事项

Golang命令行进行debug调试操作

golang的空标识符理解