Go Runtime功能初探

2023年 8月 9日 58.6k 0

以下内容,是对 运行时 runtime的神奇用法 的学习与记录

目录:

  • 1.获取GOROOT环境变量
  • 2.获取GO的版本号
  • 3.获取本机CPU个数
  • 4.设置最大可同时执行的最大CPU数
  • 5.设置cup profile 记录的速录
  • 6.查看cup profile 下一次堆栈跟踪数据
  • 7.立即执行一次垃圾回收
  • 8.给变量绑定方法,当垃圾回收的时候进行监听
  • 9.查看内存申请和分配统计信息
  • 10.查看程序正在使用的字节数
  • 11.查看程序正在使用的对象数
  • 12.获取调用堆栈列表
  • 13.获取内存profile记录历史
  • 14.执行一个断点
  • 15.获取程序调用go协程的栈踪迹历史
  • 16.获取当前函数或者上层函数的标识号、文件名、调用方法在当前文件中的行号
  • 17.获取与当前堆栈记录相关链的调用栈踪迹
  • 18.获取一个标识调用栈标识符pc对应的调用栈
  • 19.获取调用栈所调用的函数的名字
  • 20.获取调用栈所调用的函数的所在的源文件名和行号
  • 21.获取该调用栈的调用栈标识符
  • 22.获取当前进程执行的cgo调用次数
  • 23.获取当前存在的go协程数
  • 24.终止掉当前的go协程
  • 25.让其他go协程优先执行,等其他协程执行完后,在执行当前的协程
  • 26.获取活跃的go协程的堆栈profile以及记录个数
  • 27.将调用的go协程绑定到当前所在的操作系统线程,其它go协程不能进入该线程
  • 28.解除go协程与操作系统线程的绑定关系
  • 29.获取线程创建profile中的记录个数
  • 30.控制阻塞profile记录go协程阻塞事件的采样率
  • 31.返回当前阻塞profile中的记录个数

1. GOROOT()获取GOROOT环境变量

GOROOT() 返回Go的根目录。如果存在GOROOT环境变量,返回该变量的值;否则,返回创建Go时的根目录

package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Println(runtime.GOROOT()) // /Users/fliter/.g/go
}

2. Version() 获取GO的版本号

Version() 返回Go的版本字符串。要么是提交的hash和创建时的日期;要么是发行标签如"go1.20"

package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Println(runtime.Version()) // go1.19
}

3. NumCPU() 获取本机CPU个数

NumCPU返回本地机器的逻辑CPU个数

package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Println(runtime.NumCPU()) // 8

}

4. GOMAXPROCS() 设置最大可同时执行的最大CPU数

GOMAXPROCS() 设置可同时执行的最大CPU数,并返回先前的设置。 若 n < 1,则不会更改当前设置。

本地机器的逻辑CPU数可通过 NumCPU 查询。该函数在调度程序优化后会去掉?(啥时候..)

package main

import (
"fmt"
"runtime"
"time"
)

func main() {

runtime.GOMAXPROCS(1)
startTime := time.Now()
var s1 chan int64 = make(chan int64)
var s2 chan int64 = make(chan int64)
var s3 chan int64 = make(chan int64)
var s4 chan int64 = make(chan int64)
go calc(s1)
go calc(s2)
go calc(s3)
go calc(s4)

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论