并发
已收录文章:146篇
-
从一次发布后异步任务少处理的故障出发,拆解 Go worker pool 的关闭顺序:先停止接收、再关闭任务输入、让 worker 排空并由 WaitGroup 收尾,同时说明超时退出与任务持久化的边界。207 收藏
-
用一条带库存条件的 UPDATE 实现最小扣库存接口,避免先查后改造成超卖;同时说明受影响行、事务边界与死锁重试。470 收藏
-
虚拟线程适合大量阻塞型任务,但它不会自动增加数据库连接等稀缺资源。本文从读者提问出发,说明虚拟线程不该再被线程池复用,连接池本身的并发边界,以及何时应使用 Semaphore。430 收藏
-
发布包、离线资料或备份文件交付前,手工比对文件很容易漏。本文用 Go 标准库做一个并发 SHA-256 清单工具:扫描目录、限制并发、稳定输出,再用同一份清单复查文件是否被改动。328 收藏
-
Golang · Go教程 | 3个月前 | 并发 · HTTP · 性能优化 · 故障排查 · Go教程 · Go Goroutine 连接复用 pprof http.Client close Response.BodyGo 服务里调用 http.Client 后,Response.Body 没有在所有路径关闭,连接会被持续占用,pprof 里常能看到 net/http 相关 goroutine 增长。用 defer resp.Body.Close()、完整处理响应体、复用 Client,并通过压测与连接指标复查,可以把这类问题收住。201 收藏
-
Golang · Go问答 | 3个月前 | 并发 · channel · Mutex · 性能优化 · Go问答 · Goroutine channel Mutex 并发性能 锁等待 benchmark Go问答Go 里 Mutex 和 channel 不是谁绝对更快。保护一个共享变量时,Mutex 往往更直接;交接任务、串联 worker、表达所有权转移时,channel 更自然。判断时别只盯 ns/op,要看临界区、队列等待和业务动作。268 收藏
-
Go 1.22 调整了 for 循环变量的作用域,新模块里每轮循环会有自己的变量副本,能减少闭包和 goroutine 误读最后一轮值的问题。升级时要先看 go.mod、跑测试,再处理仍需要旧语义的特殊代码。113 收藏
-
Golang · Go问答 | 3个月前 | 并发 · map · RWMutex · sync.Map · Go问答 · 数据竞争 RWMutex sync.Map map并发读写 Go问答 concurrent map read and map writeGo 原生 map 不是并发安全容器,只要一个 goroutine 写 map,同时另一个 goroutine 读或写同一个 map,就可能触发 concurrent map read and map write。生产代码要按访问模式选择 RWMutex、单协程归口或 sync.Map。291 收藏
-
Golang · Go问答 | 3个月前 | 并发 · channel · range · Go问答 · 并发退出 Channel关闭 Go问答 close channel range退出 发送方关闭Go channel 关闭后仍然可以把缓冲区里的值读完,再继续读取会得到元素类型的零值和 ok=false;但关闭后的 channel 不能再写入,也不能重复关闭。真正安全的关键是让发送方统一负责关闭,并让接收方用 range 或 ok 值退出。427 收藏
-
Golang · Go问答 | 3个月前 | 并发 · channel · select · 性能排查 · Go问答 · select Go channel context default CPU飙高 忙等循环 tickerGo select 里的 default 会在没有 channel 就绪时立即返回;如果外层套着无限 for,就会形成忙等循环,让 CPU 空转。更稳的写法是阻塞等待、用 ticker 控制检查频率,并用 context 处理退出。438 收藏
-
文章 · 常见问题 | 3个月前 | 并发 · map · go · sync.Map · Goroutine RWMutex sync.Map Go map并发写 concurrent map writes 竞态检测围绕 Go map 并发写 panic,按高并发场景解释为什么共享 map 会崩溃,并给出加锁、分片 map、sync.Map 和单写协程的取舍、验证信号与上线检查清单。123 收藏
-
本文回答 Go 普通 map 并发读写为什么会报错,解释常见误区,并通过互斥锁、sync.Map、race 检查和封装访问给出可落地的选择方法。418 收藏