今天看啥  ›  专栏  ›  ThinkInAI社区

Go 并发控制:singleflight 详解

ThinkInAI社区  · 公众号  ·  · 2024-11-27 09:54
    

文章预览

singleflight 是 Go 官方扩展库 x 中提供的扩展并发原语,能够将多个并发请求合并为一个,降低服务端压力。本文就来介绍下它的用法和实现原理。 请求合并 singleflight 主要用于 抑制重复的并发调用 ,从而避免对同一资源进行重复操作,提升系统性能。 比如,当我们有多个 goroutine 并发调用一个同一个函数时, singleflight 能够实现只让一个 goroutine 发起调用,其他 goroutine 则阻塞等待,当发起调用的 goroutine 返回后, singleflight 将结果同时返回给所有 goroutine。这样我们就减少了大量的并发调用,避免重复操作。 这也是 singleflight 提供的唯一能力——请求合并。 在 Go 后端开发中,我们很容易想到,高并发场景下缓存失效时大量请求落到 DB 的场景,正是 singleflight 的用武之地。 如下图所示: singleflight 左侧图(1)中,当大量请求过来读取 Redis 缓存 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览