网络编程
位置:首页>> 网络编程>> Go语言>> Go语言中Goroutine的设置方式

Go语言中Goroutine的设置方式

作者:奋斗的大橙子  发布时间:2024-05-13 10:40:43 

标签:Go,Golang,设置,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('\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的使用率:

Go语言中Goroutine的设置方式

图一 未开始运行

Go语言中Goroutine的设置方式

图二 运行1个cpu

Go语言中Goroutine的设置方式

图三 运行2个cpu

Go语言中Goroutine的设置方式

图四 运行4个cpu

Go语言中Goroutine的设置方式

图五 运行8个cpu

二、Goroutine的调度原理复习

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

来源:https://www.cnblogs.com/dcz2015/p/11225305.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com