有没有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 广东

相关推荐

关于我大学本科四年,想了很多,但还是不知道该怎么动笔 “大学四年,是我从懵懂少年走向职场青年的转折期。这一路跌跌撞撞,有迷茫,有遗憾,也有成长和决心。” 大一刚进来时仍然有高中那股学习劲,经常一个人去图书馆学高等数学,但后面劲头一过便开始在宿舍开启躺平生活(现在想想那段时间真的很爽,无忧无虑)。由于大一担任班干部,所以经常要跟其他班的班干部交流,在此期间认识了隔壁班的一位女生,短发而很可爱,因为很多团建还有比赛都是我们两班一起参加的,而且我和她都是负责人,所以交集很多,后面慢慢地彼此对产生了好感,所以在大一刚开学的2个月后,我们在一起了,彼此之前都是初恋。但当时我真的是太太太直男了,对感情的想...
真烦好烦真烦:骗哥们可以,别把你自己也骗到了就行。哥们被你骗了真无所谓的,打个哈哈就过了。但希望你打完这段话后擦一下眼角,别让眼泪掉在手机屏幕上了就行。你说的这些话,哥们信一下也是没什么的。还能让你有个心里安慰,但这种话说出来骗骗兄弟就差不多得了,哥们信你一下也不会少块肉,但是你别搞得自己也当真了就行。哥们被你骗一下是真无所谓的,兄弟笑笑也就过去了。真不是哥们想要破你防,你擦擦眼泪好好想想,除了兄弟谁还会信你这些话?
点赞 评论 收藏
分享
04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
1
11
分享

创作者周榜

更多
牛客网
牛客企业服务