go语言并发编程2-runtime

runtime.Gosched()

作用是让出CPU时间片,重新等待安排任务。执行runtime.Gosched()后,其他协程优先执行,当前所在协程最后执行。

package main

import (
	"fmt"
	"runtime"
)

func main() {
	go func(s string) {
		for i := 0; i < 10; i++ {
			fmt.Println(s)
		}
	}("world")
	// 主协程
	for i := 0; i < 2; i++ {
		// 切一下,再次分配任务
		runtime.Gosched()
		fmt.Println("hello")
	}
}

runtime.Goexit()

终止协程,不再调用,注意不能在main方法中终止,会触发panic.

package main

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

func printHello() {
	defer fmt.Println("end func printHello")
	for i := 1; i < 10; i++ {
		fmt.Println("start print")
		if i%4 == 0 {
			runtime.Goexit()
		}
		fmt.Printf("start print:%d\n", i)
	}
}

func main() {
	go printHello()
	time.Sleep(6 * time.Second)
}

由以上代码可以看出,实际上触发runtime.Goexit()后,协程立即停止运行了。

runtime.GOMAXPROCS

设置最大运行核心数,Go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程来同时执行Go代码

其他

runtime包实际上有非常多方法,例如加上panic的trace信息:

package main

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

func a() {
	err := runtime.StartTrace()
	if err != nil {
		return
	}
	fmt.Println("start trace__")
	defer fmt.Printf("done")
	for i := 1; i < 10; i++ {
		if i%4 == 0 {
			panic("err non")
		}
	}
	runtime.StopTrace()
}

func main() {
	go a()
	time.Sleep(time.Second)
}

runtime还有很多其他的用法,之后可以挨个试试。

相关推荐

  1. go语言并发编程2-runtime

    2024-07-09 18:38:03       26 阅读
  2. go语言并发编程(二)——锁

    2024-07-09 18:38:03       27 阅读
  3. go语言并发编程(五) ——Context

    2024-07-09 18:38:03       30 阅读
  4. Go语言并发编程-案例_3

    2024-07-09 18:38:03       22 阅读
  5. 8.并发编程go

    2024-07-09 18:38:03       31 阅读

最近更新

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

    2024-07-09 18:38:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 18:38:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 18:38:03       58 阅读
  4. Python语言-面向对象

    2024-07-09 18:38:03       69 阅读

热门阅读

  1. AIGC学习笔记—LLM(前言)

    2024-07-09 18:38:03       29 阅读
  2. 【Spring Boot】thymeleaf模板引擎

    2024-07-09 18:38:03       26 阅读
  3. SpringBoot Mybatis-Plus 日志带参数

    2024-07-09 18:38:03       25 阅读
  4. 测试绩效评估

    2024-07-09 18:38:03       23 阅读
  5. 【Datagear】使用参数时的If语法

    2024-07-09 18:38:03       22 阅读
  6. 实现基于Elasticsearch的搜索服务

    2024-07-09 18:38:03       27 阅读
  7. 【网络协议】ISIS

    2024-07-09 18:38:03       23 阅读
  8. 第三章 设计模式(2023版本IDEA)

    2024-07-09 18:38:03       23 阅读
  9. 命令模式在金融业务中的应用及其框架实现

    2024-07-09 18:38:03       27 阅读
  10. 【C语言】标识符大通关!

    2024-07-09 18:38:03       30 阅读
  11. Python面试题-8

    2024-07-09 18:38:03       25 阅读