GO基础进阶篇 (八)、runtime包

在Go语言中,runtime 包提供了与程序的运行时环境相关的功能。这个包包含了一些控制Go语言程序运行时行为的函数和变量。以下是一些 runtime 包中常用的功能和对象:

  1. Goroutines 和调度器(Goroutines and Scheduler):

    • go 函数:用于启动一个新的goroutine,以便并发执行函数。
    • GOMAXPROCS 变量:用于设置可同时执行的操作系统线程的最大数量。
  2. 内存管理(Memory Management):

    • GC 函数:手动触发垃圾回收。
    • ReadMemStats 函数:获取内存统计信息。
    • SetFinalizer 函数:设置对象的终结器函数。
  3. 并发控制(Concurrency Control):

    • LockOSThreadUnlockOSThread 函数:用于将goroutine 绑定到当前线程。
    • NumCPU 函数:获取机器上的CPU核心数量。
  4. 错误处理(Error Handling):

    • Goexit 函数:立即终止调用它的goroutine,不会执行任何deferred函数。
  5. 性能分析(Profiling):

    • CPUProfile 函数:启动或停止 CPU 使用情况的分析。
    • MemProfile 函数:启动或停止内存使用情况的分析。

1.获取信息

package main

import (
	"fmt"
	"runtime"
)

func main() {
   
	fmt.Println("获取goRoot目录", runtime.GOROOT())
	fmt.Println("获取操作系统", runtime.GOOS)
	fmt.Println("获取cpu数量", runtime.NumCPU())
}

2.schedule让出时间切片

package main

import (
	"fmt"
	"runtime"
)

func main() {
   

	go func() {
   
		for i := 0; i < 5; i++ {
   
			fmt.Println("goroutine")
		}
	}()

	for i := 0; i < 5; i++ {
   
	runtime.Gosched()   //让出时间片,让别的goroutine先执行,不一定成功
		fmt.Println("main")
	}
}

3. Goexit结束协程

package main

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

func main() {
   
	go func() {
   
		fmt.Println("start")
		test()
		fmt.Println("end")
	}()

	time.Sleep(time.Second * 5)

	//结果
	//start
	//test defer
}
func test() {
   
	defer fmt.Println("test defer")
	runtime.Goexit() //结束调用它的协程
	fmt.Println("test")
}

相关推荐

  1. GO基础 ()、runtime

    2023-12-27 07:30:06       66 阅读
  2. go语言

    2023-12-27 07:30:06       28 阅读
  3. GO基础 (六)、I/O流

    2023-12-27 07:30:06       52 阅读
  4. GO基础 (十二)、反射

    2023-12-27 07:30:06       56 阅读
  5. GO基础 (十三)、泛型

    2023-12-27 07:30:06       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 07:30:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 07:30:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 07:30:06       82 阅读
  4. Python语言-面向对象

    2023-12-27 07:30:06       91 阅读

热门阅读

  1. k8s解决 搭建集群的时候notReady问题

    2023-12-27 07:30:06       60 阅读
  2. 【Go语言入门:Go程序的流程控制语句】

    2023-12-27 07:30:06       49 阅读
  3. client-go使用方法

    2023-12-27 07:30:06       61 阅读
  4. Unity编辑器紫色

    2023-12-27 07:30:06       56 阅读
  5. mysql如何分析sql是否成功使用索引

    2023-12-27 07:30:06       66 阅读
  6. 专属于程序员烂漫的表白||Python画动态爱心

    2023-12-27 07:30:06       71 阅读
  7. 微信小程序:跳转页面

    2023-12-27 07:30:06       63 阅读
  8. 运算符讲解

    2023-12-27 07:30:06       44 阅读
  9. 微信小程序实现一个天气预报应用程序

    2023-12-27 07:30:06       63 阅读
  10. C语言:冒泡排序算法的原理

    2023-12-27 07:30:06       46 阅读
  11. 【VS】如何把wpf项目打包成exe文件

    2023-12-27 07:30:06       47 阅读
  12. 数据库的连接池详解

    2023-12-27 07:30:06       53 阅读