golang_goroutine: runtime包Gosched,Goexit等函数的用法介绍

本文介绍了Golang中`runtime`包的重要函数,包括`Gosched`让出CPU时间片以调度其他任务,`Goexit`终止当前Go程,`GOMAXPROCS`设置和获取CPU核心数,以及`GC`执行垃圾回收等。讨论了如何在没有Channel的情况下协调Go程执行顺序的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go程-runtime包
  1. 主go程退出,其它子go程也会退出

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

func main() {

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

	for i := 0; i < 2; i++{
		//runtime.Gosched()  //让出时间片
		fmt.Println("hello")
	}
}

Output:

hello
hello

主线程执行完毕后,子go程还没来及执行

解决方法: 使用runtime.Gosched():

Output:

hello
go
go
go
hello

或者

go
go
go
hello
hello

等等其它结果,可以看出这个情况: 没有channel的存在下,很难确定打印的顺序

  1. runtime.Goexit() 退出所在位置的go程
    扩展: os.exit() 退出进程,给进程分配的空间也会销毁
  2. runtime.GOMAXPROCS()设置cpu的核数,返回先前的设置(一般不用动)
  3. 其它:
    runtime.goroot()获取go的安装目录
    runtime.version()获取版本号
    runtime.NumCPU()获取计算机cpu核数
    runtime.GC() 执行一次垃圾回收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值