当前位置: 首页 > news >正文

go标准库的学习-runtime

参考: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.go
Enter 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.go
world
hello
world
hello
world
hello

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

相关文章:

  • java多线程
  • 喜讯:以太坊“君士坦丁堡”升级,截止目前稳定运转
  • 如何找到 Kafka 集群的吞吐量极限?
  • Atcoder:AGC004F Namori
  • 如何学习JavaEE,项目又该如何做?
  • Spring Cloud构建微服务架构—服务消费(Ribbon)
  • long a = 136;
  • 使用权重正则化较少模型过拟合
  • Angular 响应式表单之下拉框
  • 基于 Babel 的 npm 包最小化设置
  • 洞悉物联网发展1000问之热点技术这么多,物联网的机会在哪里?
  • 另人的评测
  • vue 组件中solt 插槽使用
  • 设计模式(三)Animation中的策略模式
  • 手写springmvc框架
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2017-08-04 前端日报
  • chrome扩展demo1-小时钟
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 基础知识 - 入门篇(一)
  • mac修复ab及siege安装
  • maven工程打包jar以及java jar命令的classpath使用
  • orm2 中文文档 3.1 模型属性
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • QQ浏览器x5内核的兼容性问题
  • SwizzleMethod 黑魔法
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端设计模式
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 说说动画卡顿的解决方案
  • Hibernate主键生成策略及选择
  • (06)Hive——正则表达式
  • (2)(2.10) LTM telemetry
  • (C语言)二分查找 超详细
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core 2.1路线图
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 设计模式初探
  • .net 无限分类
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • ?.的用法
  • ??eclipse的安装配置问题!??
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [30期] 我的学习方法
  • [Android Pro] AndroidX重构和映射
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]