摘要: Go 语言扩展包中提供了另一种同步原语,它能够在一个服务中抑制对下游的多次重复请求。一个比较常见的使用场景是:我们在使用 Redis 对数据库中的数据进行缓存,发生缓存击穿时,大量的流量都会打到数据库上进而影响服务的尾延时 在资源的获取非常昂贵时(例如:访问缓存、数据库),就很适合使用 golang 阅读全文
posted @ 2022-03-16 15:12 wangzhilei 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 带权重的信号量 golang/sync/semaphore.Weighted,我们可以按照不同的权重对资源的访问进行管理,这个结构体对外也只暴露了四个方法: golang/sync/semaphore.NewWeighted 用于创建新的信号量; golang/sync/semaphore.Weig 阅读全文
posted @ 2022-03-16 15:02 wangzhilei 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 在一组 Goroutine 中提供了同步、错误传播以及上下文取消的功能,我们可以使用如下所示的方式并行获取网页的数据: package main import ( "fmt" "net/http" "golang.org/x/sync/errgroup" ) func main() { var g 阅读全文
posted @ 2022-03-16 14:47 wangzhilei 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 保证在 Go 程序运行期间的某段代码只会执行一次 func main() { o := &sync.Once{} for i := 0; i < 10; i++ { o.Do(func() { fmt.Println("only once") }) } } $ go run main.go only 阅读全文
posted @ 2022-03-16 13:56 wangzhilei 阅读(87) 评论(0) 推荐(0) 编辑