上一篇我们讲了
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
版权声明:本文为jfwan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。