Go语言入门13之runtime包案例讲解
作者:te9uila 发布时间:2024-02-02 05:54:08
标签:Go,runtime
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!
*/
来源:https://www.cnblogs.com/te9uila/archive/2023/04/30/17364897.html
0
投稿
猜你喜欢
- 生活中几乎没有什么保证:死亡、税收和需要处理字符串的程序员。字符串可以有多种形式。它们可以是非结构化文本、用户名、产品描述、数据库列名称,或
- WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。1. 优化你的
- SQL SERVER 2012中新增了CHOOSE,该函数可以从值列表返回指定索引处的项。例如:select CHOOSE(3,'A
- MySQL作为数据库的一大主力军,到处存在于我们各种系统中,相信大家都不陌生!但是,你知道你能用不代表你知道细节,那我们就来盘点盘点其中一些
- 1.在列属性中加入事件 { &
- 有时候会需要通过从保存下来的ckpt文件来观察其保存下来的训练完成的变量值。ckpt文件名列表:(一般是三个文件)xxxxx.ckpt.da
- 方法一通过斜率关系计算,公式如下图:需注意在求斜率时不要出现竖直情况,python计算会报错,但按理说应该可以计算出无穷的,此处先放这吧,等
- 这篇博客将介绍如何使用Python,OpenCV对图像进行平移转换。平移是图像沿x轴和y轴的移动。使用平移,可以将图像上下左右移动,以及上述
- Step1:确定操作系统Python 解释器的下载地址为:https://www.python.org/ ,点击&nbs
- 1、背景我们先谈谈为什么在Python编码过程中强烈推荐使用类型注解 ?Python对于初学者来说是非常好上手,原因是在于对计算机底层原理的
- 本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下# coding:utf-8from
- 前言在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很
- 目录1、将 PDF 转换为音频文件2、从列表中播放随机音乐3、不再有书签了4、清理下载文件夹前言:大家平时有没有注意到你每天可能会执行许多的
- .tkintertkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程。tkinter的优点是简单
- 代码如下#!/bin/python#coding=utf-8#python-version=2.75  
- 本文实例讲述了Python简单生成随机数的方法。分享给大家供大家参考,具体如下:主要知识点:随机整数:random.randint(a,b)
- 最近没事刚好联系下vue+springboot前段后分离的项目、用上了图片上传功能、记录一下。前端待提交的表单部分代码<el-form
- 本文实例讲述了python处理大数字的方法。分享给大家供大家参考。具体实现方法如下:def getFactorial(n): &
- 实现的思路:将准备好的图片通过opencv读取出来,并将其设置好帧数等参数后合成为无声视频。最后通过moviepy编辑视频将背景音乐加入到视
- 前言有些人看到这个问题觉得不是问题,是嘛,不就是df.col[]函数嘛,其实忽略了一个重点,那就是我们要省去把csv文件全部读取这个过程,因