zoukankan      html  css  js  c++  java
  • Go语言中Goroutine的设置

    一、 通过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('
    ')
        cmdStr := (string)(buf)
        num, err := strconv.Atoi(strings.Trim(cmdStr, "
    "))
    
        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...
    ", j)
            time.Sleep(time.Second)
        }
        fmt.Printf("程序退出")
    }

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

    图一 未开始运行

    图二 运行1个cpu

     图三 运行2个cpu

    图四 运行4个cpu

     

    图五 运行8个cpu

     

    二、Goroutine的调度原理复习

    之前的记录 https://www.cnblogs.com/dcz2015/p/10106866.html

  • 相关阅读:
    JavaScript学习总结(十一)——Object类详解
    在mysql命令行下执行sql文件
    canal HA配置
    canal 常用配置
    canal 监控数据库表 快速使用
    HashMap 因子对性能的影响
    JVM 调优
    JVM jstat 详解
    Tomcat 异常关闭排查
    Mysql canal 监控数据变化
  • 原文地址:https://www.cnblogs.com/dcz2015/p/11225305.html
Copyright © 2011-2022 走看看