Go语言入门13之runtime包案例讲解

目录
  • Runtime包
    • GOMAXPROCS()
    • Gosched()
    • Goexit()
    • 举个栗子

Runtime包

GOMAXPROCS()

​ 用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述

Gosched()

​ 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行

Goexit()

​ 用于立即中止当前goroutine的运行(中止所在协程),而并不影响其他goroutine。注意!Goexit()在中止当前协程前,还是会运行当前goroutine还没有执行的defer语句,切记,不允许在主函数调用Goexit(),会导致panic异常

runtime调度器是非常有用的东西,关于runtime包几个方法

  • Gosched:让当前线程让出cpu以让其他线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
  • NumCPU:返回当前系统的CPU核数量
  • GOMAXPROCS:设置最大的可同时使用的CPU核数
  • Goexit:退出当前goroutine(但是defer语句会照常执行)
  • NumGoroutine:返回真该执行和排队的任务总数
  • GOOS:目标操作系统
  • GOROOT:返回本机的GO路径

举个栗子

// 定义两个函数,Test01和Test02
// Test02在Test01运行结束之后运行
// 并且Test02在i = 3的时候结束运行
//Test01
func Test01(wg *sync.WaitGroup) {
	defer func() {
		fmt.Println("Test01结束!")
		wg.Done()
	}()
	fmt.Println("协程01循环输出:")
	for i := 0; i < 5; i++ {
		fmt.Println("协程01 -", i)
	}
}
// Test02
func Test02(wg *sync.WaitGroup) {
	defer func() {
		fmt.Println("Test02结束!")
		wg.Done()
	}()
    // 等待Test01运行结束
	runtime.Gosched()
	fmt.Println("协程02循环输出:")
	for i := 0; i < 5; i++ {
		if i == 3 {
			fmt.Println("i = 3 退出!")
            // 当i = 3时执行defer里的语句然后退出
			runtime.Goexit()
		}
		fmt.Println("协程02 -", i)
	}
}
// main函数调用
func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	go Test01(&wg)
	go Test02(&wg)
	wg.Wait()
	fmt.Println("This is main function!")
}
/*输出:
协程01循环输出:
协程01 - 0
协程01 - 1
协程01 - 2
协程01 - 3
协程01 - 4
Test01结束!
协程02循环输出:
协程02 - 0
协程02 - 1
协程02 - 2
i = 3 退出!
Test02结束!
This is main function!
*/

到此这篇关于Go语言入门13(runtime包)的文章就介绍到这了,更多相关Go runtime包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 对Golang中的runtime.Caller使用说明

    如下所示: func Caller(skip int) (pc uintptr, file string, line int, ok bool) 参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,.... 返回值: pc是uintptr这个返回的是函数指针 file是函数所在文件名目录 line所在行号 ok 是否可以获取到信息 示例: 我们分别打印skip为0-3的相关信息 package main import ( "fmt" "runtime"

  • go语言中切片Slice与数组Array对比以及panic: runtime error: index out of range问题解决

    目录 前言 一.go slice是什么 二.go slice实战案例 1.slice创建.使用 2.slice的长度和容量概念理解 3. 切片扩容及slice panic: runtime error: index out of range 附:go 判断数组下标是否存在 总结 前言 在go语言的学习历程当中,slice数据类型引起了我的好奇心.为啥不直接使用Slice,是人性的扭曲还是道德的沦丧~,下面让我们一探究竟~~ 一.go slice是什么 go语言中的slice是一个基于Array封

  • Golang中runtime的使用详解

    runtime 调度器是个非常有用的东西,关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行 NumCPU:返回当前系统的 CPU 核数量 GOMAXPROCS:设置最大的可同时使用的 CPU 核数 Goexit:退出当前 goroutine(但是defer语句会照常执行) NumGoroutine:返回正在执行和排队的任务总数 GOOS:目标操作系统 NumCPU package main import

  • Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process的解决方法

    目录 详细信息 前言 解析步骤 1.首先,了解一些脚本的类型 2.进入Tomcat容器内部,查Tomcat启动脚本解释器类型 总结 详细信息 [root@centOS7 ~]# docker exec -it 3cae7605916d /bin/bashOCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": st

  • Go 语言入门学习之时间包

    目录 1.前言 2.日期和时间的表示 当前时间 日期函数 如何在Golang中获取当前UNIX的时间戳 3.访问时间组件的方法 1.前言 时间和日期对于任何编程语言来说都是一个非常重要的包. GO 语言 提供了 ​​time​​ 包来测量和显示时间.既可以根据所选时区获取当前时间,又可以使用 ​​time​​ 包添加当前时区的持续时间等. 2.日期和时间的表示 ​​time​​ 包提供了时间类型,用来表示时间中的一个特定时刻,主要有以下几个函数: Now() 函数:返回当前时区的当前时间 Dat

  • Go 语言入门之net/url 包

    目录 引言 URL 格式 Go url 包函数使用格式 如何使用 URL 包 在 Golang 中对查询字符串进行 URL 编码 在 Golang 中对多个查询参数进行 URL 编码 在 Golang 中对路径段进行 URL 编码 通过对各个部分进行编码来构建完整的 URL 在 Golang 中解析 URL 处理相对路径 解析空格 判断绝对地址 解析端口 引言 在 Golang 中,将 URL 打包用于从服务器获取数据非常重要.只需了解您是否正在处理任何应用程序并且您想从任何外部位置或服务器获取

  • R语言入门使用RStudio制作包含Rcpp代码的R包

    目录 1. 创建项目 2. 修改一些文件 3. 打包 4. 使用Eigen或其它依赖库会出现的问题 前面博客中有提及,当我们进行模拟想要再次进行提速时,通常都会使用Rcpp将我们的R代码改成C++代码.具体Rcpp的使用可参考博客:Rcpp入门R代码提速方法过程,R语言学习RcppEigen进行矩阵运算. 平时在我们使用的时候,直接使用Rcpp::sourceCpp()就可以直接将我们的C++代码中的函数进行导入,这不会遇到什么问题,但如果我们想要使用snowfall进行并行时就不能再这样做了.

  • Go 语言入门之Go 计时器介绍

    目录 引言 Go 的计时器 Ticker 计时器是如何工作的? Ticker 使用方式 总结 引言 一般来说,很多时候我们面临这样一种情况,即我们需要运行时间记录器,它不断向我们显示当前时间或在给定的时间间隔内保持执行一定的代码和平,在这种情况下,我们应该使用 ​​Ticker​​​,使用这个我们需要使用 go 语言的 ​​time​​​ 包,我们有一个名为 ​​NewTicker()​​​ 的方法,它允许我们停止和启动时间代码,我们需要通过传递 ​​chan​​​ 和 ​​bool​​ 作为将

  • Go语言入门exec的基本使用示例

    目录 使用 GoLang exec 包运行命令 为不同的操作系统指定命令 Go exec 命令捕获输出 Go cmd.StdinPipe Go cmd.StdoutPipe 总结 Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令.Go exec 命令教程展示了如何在 Golang 中执行 shell 命令和程序. 要使用这个包,我们需要按如下方式导入: import "os/exec" 使用 GoLang exec 包运行命令 我们可以运行任何我们希望的命令.就像我

  • C语言深入探究冒泡排序与堆排序使用案例讲解

    目录 一.冒泡排序 1.1冒泡排序引入 1.2冒泡排序的核心思想与算法分析 1.3实例说明 1.4优化 1.5代码实现 1.6性能分析 二.堆排序 2.1堆的基础知识 2.1.1堆是什么 2.1.2堆的性质 2.2堆排序的核心思想与基本步骤 2.3实例说明与分析 2.4代码实现 2.5性能分析 一.冒泡排序 1.1冒泡排序引入 对于任何编程语言,当我们学到循环和数组的时候,都会介绍一种排序算法:冒泡排序:深入学习更多排序算法后和在实际使用情况中,冒泡排序的使用还是极少的.它适合数据规模很小的时候

  • Oracle PL/SQL语言入门基础

    正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

  • C语言入门的一些基本资源推荐和程序语法概览

    为什么要学习C语言? 为什么要学习.使用C语言?为什么要学习一个可能比自己都岁数大的编程语言? 选择一门编程语言,"为什么而学"这个目的是最重要的,目的不明确就没法学好.这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因.因为学习的目的不明确,学习当然也没有动力.还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备

  • go语言入门环境搭建及GoLand安装教程详解

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型.编译型语言.Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算. Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

  • Go语言运算符案例讲解

    算数运算符 算数运算符和C语言几乎一样 运算符 描述 实例 + 相加 A + B - 相减 A - B * 相乘 A * B / 相除 B / A % 求余 B % A ++ 自增 A++ – 自减 A– 注意点: 只有相同类型的数据才能进行运算 package main import "fmt" int main(){ var num1 int32 = 10 //var num2 int64 = num1 // 类型不同不能进行赋值运算 var num2 int64 = int64(

随机推荐

其他