什么是go runtine
什么是go runtine
goroutine(协程)是一种轻量级的线程,由Go运行时(runtime)管理,一个典型的 Go 程序可能会同时运行成千上万个 goroutine,Goroutines 使得程序可以并发执行,而无需显式地创建和管理线程。通过关键字 go 可以
启动一个新的 goroutine,例如:go someFunction()。
每个 goroutine 都有自己的独立栈空间,这使得它们之间的数据不容易互相干扰。与传统的多线程编程相比,使用 goroutines 不需要开发者显式地进行线程的创建、销毁和同步。Go 运行时会自动处理这些事务。
如何控制 goroutine 的生命周期
- 启动
使用关键字 go 可以启动一个新的 goroutine。
go func() { // goroutine 的代码逻辑
}()
- 等待结束
希望主程序等待某个 goroutine 执行完毕后再继续执行。可以使用 sync.WaitGroup 来实现等待。
package main
import ( "fmt"
"sync"
)
func main() { var wg sync.WaitGroup
wg.Add(1) // 添加一个等待的 goroutine
go func() { defer wg.Done() // goroutine 完成时调用 Done 减少计数
// goroutine 的代码逻辑 fmt.Println("Goroutine executing...")
}()
// 等待所有 goroutine 完成 wg.Wait()
fmt.Println("Main goroutine exiting.")
}
- 使用通道(channel)来通知 goroutine 退出
全站分卷索引 · 29 卷
- 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
- 2Go string 和 []byte 的区别
- 3数组和切片的区别
- 4扩容前后的Slice是一样的吗
- 5Go语言map是有序的还是无序的, 为什么
- 6go里面的map是并发安全的吗?如何并发安全
- 7Go 的错误处理和 Java 的异常处理对比
- 8介绍一下panic和recover
- 9什么是defer?有什么作用
- 10Go并发
- 11进程、线程的区别
- 12什么是go runtine
- 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
- 14什么是互斥锁(mutex)?在什么情况下会用到它们?
- 15Mutex有几种模式
- 16goroutine什么情况会发生内存泄漏?如何避免。
- 17Go语言中GC的流程是什么
- 18Go 中的内存逃逸现象是什么?
- 19CAP 理论,为什么不能同时满足
- 20说一下 Gin 的路由怎么实现的
- 21简述slice的底层原理,和数组的区别是什么
- 22defer底层原理
- 23侵入式和非侵入式的区别
- 24goroutine与线程的区别
- 25goroutine在什么情况下会被挂起呢?
- 26GC(垃圾回收)原理 1.5版本
- 27简述Go的垃圾回收机制
- 28协程优势及其通信方式
- 29Go的内存对齐