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 逻辑核心

数。

相关推荐
小凯123458 分钟前
pytest框架-详解(学习pytest框架这一篇就够了)
python·学习·pytest
今儿敲了吗41 分钟前
29| 高考志愿
c++·笔记·学习·算法
浅念-1 小时前
C++ 模板进阶
开发语言·数据结构·c++·经验分享·笔记·学习·模版
mightbxg3 小时前
【学习一下】深入理解交叉熵
人工智能·学习·机器学习
weixin_458872613 小时前
东华复试OJ每日3题打卡·复盘100~102
学习
我命由我123454 小时前
Photoshop - Ps还原和历史记录
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
我命由我123455 小时前
Photoshop - Ps工作界面
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
ps酷教程5 小时前
spring-retry学习 (2) -图解源码
学习
2501_943695335 小时前
大专市场调查与统计分析专业,怎么学习市场调研问卷的设计?
人工智能·学习
sponge'5 小时前
opencv学习笔记14:transformer
笔记·学习·transformer