有没有Go选手啊,这个执行原理是什么啊?

答案好奇怪啊

func main() {
runtime.GOMAXPROCS(1)
wg := sync.WaitGroup{}
wg.Add(20)
for i := 0; i < 10; i++ {
go func() {
fmt.Println("i: ", i)
wg.Done()
}()
}
for i := 0; i < 10; i++ {
go func(i int) {
fmt.Println("i: ", i)
wg.Done()
}(i)
}
wg.Wait()
}
#牛客在线求职答疑中心#  #机械/制造每日一题#  #Go#  #golang#
📝笔试题目
👥面试题目
全部评论
这段代码是一个Go语言程序,主要涉及到了goroutine、channel和waitgroup等概念。 1. `runtime.GOMAXPROCS(1)`:设置Go程序可以并行执行的CPU核心数,这里设置为1,意味着程序只能使用一个CPU核心。 2. `wg := sync.WaitGroup{}`:创建一个新的等待组,用于等待所有goroutine执行完毕。 3. `wg.Add(20)`:设置等待组的计数器值为20,表示需要等待20个goroutine执行完毕。 4. 两个for循环分别创建了10个goroutine,每个goroutine都会执行`fmt.Println("i: ", i)`和`wg.Done()`。 5. `wg.Wait()`:等待等待组中的计数器值为0,即所有goroutine执行完毕。 这段代码的执行结果是:会输出20个"i: x",其中x的值从0到19。 至于答案为什么奇怪,可能是因为题目要求输出结果与实际输出结果不符,或者题目要求理解这段代码的执行原理,而答案并没有解释清楚。
2 回复 分享
发布于 2024-07-09 19:36 AI生成
9012345678,9 协程是最后创建的,会直接运行 9 协程,然后在按队列顺序运行, 可以看下协程创建的源码
1 回复 分享
发布于 2024-07-21 09:37 北京
循环变量是共享的,不过似乎go 1.22已经填补了这个坑
1 回复 分享
发布于 2024-07-09 20:33 北京
这种直接gpt呀,
点赞 回复 分享
发布于 2024-08-23 10:22 广东
答案奇怪是指什么,没实际跑过。两个循环并发,上面的goroutine打印循环变量i,这个地址是共享的,有读有写有竞态,因此上面的循环不保证打印出所有的0-10,下面的打印拷贝到函数内部的循环变量i,没有竞态问题,因此能输出0-10。20个goroutine没有同步,因此可能以任意顺序执行
点赞 回复 分享
发布于 2024-08-17 07:03 四川
go大佬在这里【干了3年go,吹嘘下不过分吧】 给你解释下这段代码。 涉及到协程的一些知识。 第一段代码,由于循环变量未传入到协程,协程与for循环使用的是同一个循环变量 i, 协程是并发不阻塞的。也就是在执行协程的同时,for循环也在执行。所以打印的结果其实是不确定的,要先理解并发的概念,并发并发就是不分先后,不分先后的意思是不确定先后,但实际执行其实是有先后的,只是这个先后是不确定的。所以实际打印的结果跟各自的机器有关系,你换一台机器打印的结果可能就不一样了。 第二段代码,循环变量 i 传入到协程里,协程都会有一个协程栈空间,这个i传入到协程占栈空间里,也就创建了一个副本,copy了一份,所以每个协程里的值其实是确定的,也就是for循环的i传入的值。 基础知识点:协程,并发,协程栈空间。多说一句,这并不是什么bug哈。
点赞 回复 分享
发布于 2024-08-15 21:00 上海
是一道用来理解 gmp 调度机制的蛮好的题,可以配合曹大的 go 调度相关博文来理解,也可以像楼上说的直接扎进源码里看👀
点赞 回复 分享
发布于 2024-08-10 01:30 浙江
什么鬼 根本看不懂
点赞 回复 分享
发布于 2024-08-02 16:31 北京
这是啥题
点赞 回复 分享
发布于 2024-08-01 17:47 北京
字节组内实习生招聘,同学感兴趣可以私聊
点赞 回复 分享
发布于 2024-07-18 14:41 广东

相关推荐

鸿雁于飞:1. 求职定位乱成一锅粥,直接劝退HR 你期望职位同时写了「项目经理/技术经理/交付经理」,这仨岗根本不是一个赛道!项目经理玩流程和干系人,技术经理玩架构和带技术团队,交付经理玩客户和回款,你仨全堆上,HR直接判定「这人自己都不知道自己要干啥,没核心竞争力」,直接扔简历。 ​ 2. 2年多的职业空窗期,一个字不提,纯纯自杀行为 金融行业最看重职业连贯性和背景干净,你2018年5月到2020年8月,整整2年3个月没上班,啥说明都没有!HR直接脑补你是不是有竞业限制、是不是创业失败、是不是有啥背调过不了的问题,直接不敢往下看,首轮就给你筛了,这是最致命的坑! ​ 3. 工作经历纯纯摆烂,干货全藏起来了 你每段工作就写个公司、职位、时间,干了啥、带了多大团队、出了啥核心成果、给公司赚了/省了多少钱,一个字没有,全堆到后面的项目里了。HR看简历就3秒,第一眼看不到你每段工作的价值,直接就划走了,根本不会翻你后面的项目。 ​ 4. 项目经验像个大杂烩,还全是bug 你堆了快10个项目,银行、证券、公安、政务、日本项目啥都有,跟个杂货铺一样,HR根本看不到你的核心优势在哪。而且项目连个起止时间都不写,谁知道你这是最近的标杆项目,还是10年前刚入行干的活?还有数据前后矛盾,一会说「零事故交付」,一会说「生产事故率降低50%」,HR一看就觉得你瞎包装,根本不信。 ​ 5. 15年经验的经理岗,还在写一线拧螺丝的活,层级完全错配 你都应聘经理级岗位了,简历里还在写自己写接口、写测试脚本、做前端开发这些一线执行的活,完全没写你怎么搭建管理体系、怎么带团队、怎么搞定甲方、怎么控项目风险、怎么拿经营结果,MBA的价值一点没体现出来。HR看完直接觉得:合着你干了15年,还是个高级开发,根本达不到经理岗的要求,直接pass。 ​ 6. AI风口完全没抓住,写了句空话等于没写 现在全行业都在卷AI+金融,人家招管理岗,都要能落地AI场景的人。你就写了句「深化Transformer与大模型底层技术研习」,纯纯空话,一点实际落地成果都没有,跟其他候选人比,完全没差异化优势,人家凭啥放着年轻能落地的不要,要你这个只学了理论的? 姐好好看看,然后改改简历吧,要专,要精,然后降低求职目标。希望你能早日拿到offer
点赞 评论 收藏
分享
评论
1
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务