博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go标准库的学习-runtime
阅读量:6510 次
发布时间:2019-06-24

本文共 2629 字,大约阅读时间需要 8 分钟。

参考:https://studygolang.com/pkgdoc

导入方式:

import "runtime"

runtime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见reflect报的文档获取运行时类型系统的可编程接口。

 

1.constant常量

const GOOS string = theGoos

GOOS是可执行程序的目标操作系统(将要在该操作系统的机器上执行):darwin、freebsd、linux等。

可以用来判断你的电脑的系统是什么,然后根据不同的系统实现不同的操作,比如你想要根据系统的不同来说明退出程序使用的不同的快捷键,就说可以使用该常量来判断:

package main import(    "fmt"    "runtime")var prompt = "Enter a radius and an angle (in degrees), e.g., 12.5 90, " +    "or %s to quit."func init(){    if runtime.GOOS == "window" {        prompt = fmt.Sprintf(prompt, "Ctrl+Z, Enter")    }else {        prompt = fmt.Sprintf(prompt, "Ctrl+D")    }}func main() {    fmt.Println(prompt)}

因为我的系统是Unix,所以返回:

userdeMBP:go-learning user$ go run test.goEnter a radius and an angle (in degrees), e.g., 12.5 90, or Ctrl+D to quit.

 

2.

func GOROOT

func GOROOT() string

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

func Version

func Version() string

返回Go的版本字符串。它要么是递交的hash和创建时的日期;要么是发行标签如"go1.3"。

func GC

func GC()

GC执行一次垃圾回收。

举例,说明sync.Pool缓存的期限只是两次gc之间这段时间。使用了runtime.GC(),缓存会被清空,那么结果就会变成:

package main import(    "fmt"    "sync"    "runtime")func main() {    //创建一个对象,如果pool为空,就调用该New;如果没有定义New,则返回nil    pipe := &sync.Pool{        New: func() interface{} {            return "hello ,New"        },    }    fmt.Println(pipe.Get())//hello ,New    pipe.Put("hello, put")    runtime.GC() //作用是GC执行一次垃圾回收    fmt.Println(pipe.Get())//hello ,New,本来应该是hello, put}

 

runtime包中几个用于处理goroutine的函数:

func Goexit

func Goexit()

Goexit终止调用它的go程。其它go程不会受影响。Goexit会在终止该go程前执行所有defer的函数。

在程序的main go程调用本函数,会终结该go程,而不会让main返回。因为main函数没有返回,程序会继续执行其它的go程。如果所有其它go程都退出了,程序就会崩溃。

func Gosched

func Gosched()

Gosched使当前go程放弃处理器,以让其它go程运行。它不会挂起当前go程,因此当前go程未来会恢复执行。

其实就是让该goroutine让CPU把时间片让给别的goroutine,下次某个时候再继续执行,举例:

package main import(    "fmt"    "runtime")func say(s string) {    for i := 0; i < 3; i++{        runtime.Gosched()        fmt.Println(s)    }}func main() {    go say("world")    say("hello")}

返回:

userdeMacBook-Pro:go-learning user$ go run test.goworldhelloworldhelloworldhello

func NumGoroutine

func NumGoroutine() int

NumGoroutine返回当前存在的Go程数。

func NumCPU

func NumCPU() int

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

func GOMAXPROCS

func GOMAXPROCS(n int) int

GOMAXPROCS设置可同时执行的最大CPU数,并返回先前的设置。 若 n < 1,它就不会更改当前设置。本地机器的逻辑CPU数可通过 NumCPU 查询。本函数在调度程序优化后会去掉。设置了同时运行逻辑代码的

package main import(    "fmt"    "runtime" ) func main() { fmt.Println(runtime.GOROOT()) // /usr/local/Cellar/go/1.11.4/libexec fmt.Println(runtime.Version()) //go1.11.4 fmt.Println(runtime.NumCPU()) //8 fmt.Println(runtime.GOMAXPROCS(runtime.NumCPU())) //8 }

 未完待续

 

转载于:https://www.cnblogs.com/wanghui-garcia/p/10331590.html

你可能感兴趣的文章
使用eclipse与android studio 在开发自定义控件时的区别
查看>>
我的友情链接
查看>>
mysql学习笔记
查看>>
django 问题解决
查看>>
年年有鱼游戏Android源码项目
查看>>
java使用Iterator、for循环同步数据
查看>>
创建镜像iso文件
查看>>
Linux下创建软RAID5和RAID10实战
查看>>
mariadb的日志
查看>>
C++类的存储
查看>>
ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
查看>>
解决使用Handler时Can't create handler inside thread that has not called Looper.prepare()
查看>>
跟我一起学docker(四)--容器的基本操作
查看>>
磁化强度
查看>>
C/C++ 数据范围
查看>>
LVS+keepalived+nginx
查看>>
monkey如何通过uiautomatorviewer的bounds坐标点击控件
查看>>
第22章,mysql数据库-1
查看>>
【亲测】教你如何搭建 MongoDB 复制集 + 选举原理
查看>>
虚拟化网络技术
查看>>