【笔记】Go语言并发下的runtime包

前言

Go语言并发下的runtime包学习笔记

让出CPU时间片

  • 每当协程执行到runtime.Goshed()时,立即将当前协程的时间片让出给其他协程执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "runtime"

func task() {
...
}

func main() {
go task()
for i := 0; i < 3; i++ {
runtime.Goshed()
}
}

退出当前协程

  • 每当协程执行到runtime.Goexit()时,立即退出当前协程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "runtime"

func task() {
for i := 0; i < 3; i++ {
...
if i == 2 {
runtime.Goexit()
}
}
}

func main() {
go task()
}

查看当前主机的CPU核心数

1
2
3
4
5
import "runtime"

func main() {
runtime.NumCPU()
}

指定占用的CPU核心数

  • go1.5及之前默认使用1个核心,go1.5之后默认使用当主机的核心数最大值

<num>:允许Go程序使用的最大核心数

1
2
3
4
5
import "runtime"

func main() {
runtime.GOMAXPROCS(<num>)
}

完成

参考文献

哔哩哔哩——郭宏志-老郭