← 返回目录

什么是go runtine

第 12 / 29 卷日期:

什么是go runtine

goroutine(协程)是一种轻量级的线程,由Go运行时(runtime)管理,一个典型的 Go 程序可能会同时运行成千上万个 goroutine,Goroutines 使得程序可以并发执行,而无需显式地创建和管理线程。通过关键字 go 可以

启动一个新的 goroutine,例如:go someFunction()。

每个 goroutine 都有自己的独立栈空间,这使得它们之间的数据不容易互相干扰。与传统的多线程编程相比,使用 goroutines 不需要开发者显式地进行线程的创建、销毁和同步。Go 运行时会自动处理这些事务。

如何控制 goroutine 的生命周期

  1. 启动

使用关键字 go 可以启动一个新的 goroutine。

go func() { // goroutine 的代码逻辑

}()

  1. 等待结束

希望主程序等待某个 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.")

}

  1. 使用通道(channel)来通知 goroutine 退出
全站分卷索引 · 29 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
  2. 2Go string 和 []byte 的区别
  3. 3数组和切片的区别
  4. 4扩容前后的Slice是一样的吗
  5. 5Go语言map是有序的还是无序的, 为什么
  6. 6go里面的map是并发安全的吗?如何并发安全
  7. 7Go 的错误处理和 Java 的异常处理对比
  8. 8介绍一下panic和recover
  9. 9什么是defer?有什么作用
  10. 10Go并发
  11. 11进程、线程的区别
  12. 12什么是go runtine
  13. 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
  14. 14什么是互斥锁(mutex)?在什么情况下会用到它们?
  15. 15Mutex有几种模式
  16. 16goroutine什么情况会发生内存泄漏?如何避免。
  17. 17Go语言中GC的流程是什么
  18. 18Go 中的内存逃逸现象是什么?
  19. 19CAP 理论,为什么不能同时满足
  20. 20说一下 Gin 的路由怎么实现的
  21. 21简述slice的底层原理,和数组的区别是什么
  22. 22defer底层原理
  23. 23侵入式和非侵入式的区别
  24. 24goroutine与线程的区别
  25. 25goroutine在什么情况下会被挂起呢?
  26. 26GC(垃圾回收)原理 1.5版本
  27. 27简述Go的垃圾回收机制
  28. 28协程优势及其通信方式
  29. 29Go的内存对齐