
go并发
文章平均质量分 64
go并发
wangfy_
这个作者很懒,什么都没留下…
展开
-
[warning!] golang defer函数里的ctx超时 会导致分布式锁或其他资源无法释放
注意:UnLock的ctx要使用context.Background() 如果UnLock依旧使用原ctx,可能会因为原ctx超时会导致UnLock无法执行,进而导致分布式锁无法释放代码:func (s *MyService) MyFunc(ctx context.Context) (err error) { // redis lock if err = s.dao.LockWithExp(ctx, model.GetMyKeyRedisLock(), ...原创 2021-10-01 11:32:55 · 480 阅读 · 2 评论 -
golang的select里case是没有顺序的是随机的
【select里的case没有顺序,是随机的】更多https://segmentfault.com/a/1190000022520711原创 2021-03-18 11:53:41 · 896 阅读 · 0 评论 -
#### channel的关闭 ####
转自:https://zhuanlan.zhihu.com/p/297046394仅做个人备份,浏览请看原文目录关闭 channel 究竟做了什么?closechan一个判断 chan 是否 close 的函数思考方法一:通过“写”chan 实现思考方法二:通过“读”chan 实现chan close 原则其实并不需要isChanClose函数 !!!官方推荐通过context配合来关闭chan(#### 主要 ####)怎么优雅关闭 chan ?...转载 2021-03-18 10:38:33 · 2431 阅读 · 0 评论 -
#### 进程、线程、gorouter、go的GMP模型 ####
严正声明本文摘自:【原文作者:Aceld,转自链接:https://learnku.com/articles/41728】仅做个人备份,浏览请看原文目录goroutine线程-协程-GMP的关系GMP模型含义构成调度器的设局策略一个go func ()的调度流程更多参考goroutine一个线程分为 内核态线程 和 用户态线程,在线程切换时,前者比后者需要更多的资源。而一个 “用户态线程” 必须要绑定一个 “内核态线程”,但是 CPU 并不知道..转载 2021-03-17 18:18:01 · 783 阅读 · 1 评论 -
#### sync.WaitGroup + chan 组合并发控制 ####
func (s *WordLibService) CheckWordLib(ctx context.Context, wls []*message.WordLib) error { sw := sync.WaitGroup{} checkResChan := make(chan error, 1) waitGroupChan := make(chan struct{}, 1) // 检查词组上限 go func() { sw.Add(1) if len(wls) > 1000 .原创 2020-12-10 11:02:24 · 868 阅读 · 0 评论 -
sync.WaitGroup
func (service *Service) GetTopicByIds(ctx context.Context, ids []int64, withStatistics, withUserBehavior bool, userID string) (map[int64]*model.TopicInfo, map[int64]*model.TopicStatistic, error) { topicInfos := make(map[int64]*model.TopicInfo, 0) topi.原创 2020-12-10 10:44:02 · 175 阅读 · 0 评论 -
channel 协程同步
与主协程协同:feedADChan := make(chan struct{}, 1)var feedAD *model.Advertisementif req.WithFeedAD { go func() { var fetchAdvMaterialErr error if fetchAdvMaterialErr, feedAD = service.FetchAdvMaterial(g, t.AdvertisementClient, ObjectPrefi原创 2020-12-01 17:15:53 · 678 阅读 · 0 评论 -
go sync.once
转自:https://blog.youkuaiyun.com/sunansheng/article/details/90174851仅作个人备份,转载请看原文作用sync.once可以控制函数只能被调用一次。不能多次重复调用。示例代码package mainimport ( "fmt" "sync")func main() { o := &sync.Once{} var wa sync.WaitGroup wa.Add(2) g...转载 2020-07-16 17:13:44 · 174 阅读 · 0 评论