并发控制
已收录文章:22篇
-
1. 前言 Golang context是Golang应用开发常用的并发控制技术,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 context翻译成中文是"上下文",即它可以控470 收藏
-
Go select 里的 nil channel 不会被选中,这个特性可以用来动态关闭某个分支。常见场景是多个输入源只消费一次、某个阶段完成后暂停监听,或者避免关闭 channel 后的重复读取。467 收藏
-
Golang · Go问答 | 2个月前 | golang · errgroup · Context · 并发控制 · Go问答 · 错误传播 Go errgroup.SetLimit errgroup.WithContext Go 并发限制 批量调用 context 取消批量请求第三方接口时,errgroup.WithContext 配合 SetLimit 能把并发上限、首个错误返回和派生上下文取消放进同一段代码。这里给出可直接核对的最小写法、限额取值与几个容易卡住的边界。467 收藏
-
Golang · Go问答 | 1个月前 | 超时 · Context · 并发控制 · Go问答 · Go 后台任务 Deadline 请求取消 context.Cause context.WithoutCancelcontext.WithoutCancel 可以让派生上下文忽略上游取消,但它会同时失去 Deadline、Err 和 Done。本文用 HTTP 请求收尾场景对比 WithoutCancel、WithTimeout 和 WithCancelCause,给出可验证的后台任务边界和回归指标。465 收藏
-
本文从 Redis 分布式锁偶发并发进入的现场出发,复现旧请求误删新锁的问题,定位锁值缺少身份标记的根因,并用 token 校验方式修复释放锁流程。464 收藏
-
1. 前言 channel一个类型管道,通过它可以在goroutine之间发送和接收消息。它是Golang在语言层面提供的goroutine间的通信方式。 Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核459 收藏
-
Redis SETNX 只能完成抢锁,不能单独保证安全释放。本文用订单超时任务拆解误删他人锁的竞态,给出带随机令牌的加锁、续期边界与 Lua 原子释放脚本,并用可复查的命令验收。450 收藏
-
Redis 8.4 新增 DELEX,可以在服务端按值或摘要条件删除字符串键,避免客户端先 GET、再比较、再 DEL 的并发窗口。本文用旧流程对照 IFEQ、IFNE、IFDEQ、IFDNE 四种条件,拆开返回值、版本兼容、摘要计算和上线验收边界。443 收藏
-
Go 定时任务最容易被忽略的问题不是如何按时触发,而是上一次还没结束时下一次又开始。本文用 context、超时和退出确认设计一个不会重叠执行的任务循环,并说明失败、取消和告警怎么收口。440 收藏
-
批量计算文件 SHA-256 时,直接为每个文件启动 goroutine 很容易把磁盘和句柄拖满。本文用一个可取消的小工具演示如何用 context、固定 worker 数和结果汇总,把停止、错误和部分结果处理清楚。419 收藏
-
库存接口最难处理的不是把数字减一,而是让调用方准确区分扣减成功、重复请求、库存不足和参数错误。本文用 Redis Lua 原子脚本统一返回码,并给出 Go 服务端的参数、错误和兼容设计。346 收藏
-
Golang · Go教程 | 2个月前 | 错误处理 · Context · 并发控制 · Go教程 · 并发控制 Go教程 context取消 context.WithCancelCause context.Causecontext.WithCancelCause 适合在请求链路中保留明确取消原因,让子任务不只知道 context canceled,还能知道是权限拒绝、上游失败还是主动终止。落地时要区分系统取消和业务错误。342 收藏