首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

一个有意思的go routine案例

Golang 一个有意思的go routine案例 今天我们看一个有意思的go routine案例,从而了解golang中的sync包的waitgroup用法。...21 22 routine: 0 routine: 3 routine: 1 routine: 13 23 24 ...省略 198 199 routine: 189 routine: 198 routine...上面的例子不难看出来: 1、因为go routine是协程,所以存在这个routine的先后顺序无法保证,可能后面的循环先输出。例如routine3出现在routine1的前面。...2、go routine的运行需要时间,循环到第22次的时候,routine0的结果才输出来。循环结束的时候,还有一些go routine没有执行完。...为了保证go routine全部执行完毕并输出,我们往往会使用sleep 函数阻塞主程序main,从而等待go routine运行。

20260

Golang 基础:原生并发 goroutine channel 和 select 常见使用场景

<-c //读取,阻塞等待 fmt.Println("worker finished") } 上面的代码中,主 routine 创建了一个函数,然后在子 routine 中执行,主 routine..., write to channel worker finished 可以看到,这样的确实现了类似“信号”的机制:在一个 routine 中通知另一个 routine。...goroutine 子 routine 中读取等待这个 channelA 主 routine 关闭 channel,然后阻塞在 channelB 上,此时所有子 routine 开始执行 所有子 routine...执行完后,通过 channelB 唤醒主 routine 运行结果: main routine: close channel main routine: read channel exec f in...: all worker finished 一句话总结: 用 2 个 channel 实现了 【主 routine 通知所有子 routine 开始】 和【子 routine 通知主 routine

91230

论Go语言中goroutine的使用

非常符合逻辑的代码: 主routine开一个routine把request传递给saveRequestToRedis1,让它把请求储存到redis节点1中 同时开另一个routine把request传递给...好吧,你可以说这个saveRequestToRedis的函数实现的有问题,没有考虑到会是使用go routine调用。...那就是我的goroutine的使用有问题,主routine在开一个routine的时候并没有确认这个routine里面的任何一句代码有没有修改了主routine中的数据。...对的,主routine确实需要考虑这个情况。但是按照这个思路,所以呢?主goroutine在启用go routine的时候需要阅读子routine中的每行代码来确定是否有修改共享数据??...我们就没必要将1000万个用户放在一个routine中运行处理,考虑将1000万用户分成1000份,每份开一个goroutine,一个goroutine分发1万个用户,这样在效率上会提升很多。

1.4K80
领券