golang学习-goroutine

1、goroutine协程

goroutine 是 Go 语言支持并发的核心,一个goroutine会以一个很小的栈开始其生命周期,一般只需要2KB。区别于操作系统线程由系统内核进行调度, goroutine 是由Go运行时(runtime)负责调度。例如Go运行时会智能地将 m个goroutine 合理地分配给n个操作系统线程,实现类似m:n的调度机制,不再需要Go开发者自行在代码层面维护一个线程池。

goroutine 好处:占用内存小,大约2KB,资源调度开销少,用户级线程。

启动goroutine

go关键字

go test()

如果只使用go 开启一个协程,如果主进程执行完毕,协程还没有执行完,这时候协程也会关闭。

为了避免这种情况,使用sync.waitGroup来等待协程完成。下面是代码例子:

Go 复制代码
package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

func test() {
	for i := 0; i < 10; i++ {
		fmt.Println("test golang", i)
		time.Sleep(time.Millisecond * 100)
	}
	wg.Done() //协程计数器-1
}
func main() {
	wg.Add(1) //协程计数器+1
	go test() //开启一个协程
	for i := 0; i < 10; i++ {
		fmt.Println("main golang", i)
		time.Sleep(time.Millisecond * 20)
	}
	wg.Wait() //等待协程执行完毕
	fmt.Println("主线程完成")
}
2、启动多个goroutine

通过下面代码,发现每次打印的数字都不一样这是因为 10 个 goroutine是并发执行的,而 goroutine 的调度是随机的。

Go 复制代码
package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go test(i)
	}
	wg.Wait()
}

func test(i int) {
	defer wg.Done()
	fmt.Println("你好test", i)
}

3、设置golang并行运行时占用的cpu数量

Go 语言中可以通过 runtime.GOMAXPROCS()函数设置当前程序并发时占用的 CPU 逻辑核心

数。

相关推荐
青山是哪个青山8 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb9 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘9 小时前
基于zynqMP15eg的linux驱动学习
学习
圣殿骑士-Khtangc11 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
知识分享小能手11 小时前
线性代数学习教程,从入门到精通,向量组的线性相关性 — 完整知识点梳理(7)
学习·线性代数·机器学习
Shell运维手记11 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
动词ing12 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
小O的算法实验室14 小时前
IEEE TII,学习为多目标深度学习生成偏好
人工智能·深度学习·学习
吃好睡好便好15 小时前
说说高温对情绪的影响
学习·生活·情绪·高温
xzlAwin15 小时前
Win10安装Go语言多版本管理器g工具
开发语言·golang