上一篇我们讲了 go-zero 中的并发工具包 core/syncx。
从整体分析来看,并发组件主要通过 channel + mutex 控制程序中协程之间沟通。
Do not communicate by sharing memory; instead, share memory by communicating.
不要通过共享内存来通信,而应通过通信来共享内存。
本篇来聊 go-zero 对 Go 中 goroutine 支持的并发组件。
我们回顾一下,go原生支持的 goroutine 控制的工具有哪些?
go func()开启一个协程sync.WaitGroup控制多个协程任务编排sync.Cond协程唤醒或者是协程等待
那可能会问 go-zero 为什么还要拿出来讲这些?回到 go-zero 的设计理念:工具大于约定和文档。
那么就来看看,go-zero 提供哪些工具?
threading
虽然 go func() 已经很方便,但是有几个问题:
- 如果协程异常退出,无法追踪异常栈
- 某个异常请求触发panic,应该做故障隔离,而不是整个进程退出,容易被攻击
我们看看 core/threading

本文探讨了Go语言中的并发控制,重点关注了GoSafe和NewWorkerGroup两个工具。GoSafe在协程出现异常时打印异常栈,帮助开发者定位问题。NewWorkerGroup简化了任务管理,自动处理任务状态。此外,还提到了Pool的使用,其特点是对象根据使用时间进行懒销毁,并提供了生产者-消费者模型的实现。文章强调了Go框架中工具的重要性,并推荐了Go-zero项目和微信交流群。
最低0.47元/天 解锁文章
7万+

被折叠的 条评论
为什么被折叠?



