戈鲁廷正在花费与循环相同的时间来执行我的函数

我有一个函数来创建 Istio 虚拟服务对象。我正在使用 goroutine 同时执行我的函数,启动 100 个工作线程。


            var data map[string]string

            for _, data = range MapList {

                wg.Add(1)

                limit.Execute(func() {

                    go func(data map[string]string) {

                        defer wg.Done()

                        _,_ = m.createVirtualServices(ctx, data, namespace)

                    }(data)

                })

                wg.Wait()

            }

这需要完全相同的时间来执行,如果我只是循环使用seMapList并执行我的函数。


为什么?


交互式爱情
浏览 74回答 2
2回答

慕桂英3389331

因为你正在等待戈鲁丁在你开始后立即完成。试试这个:            for _, data = range MapList {                wg.Add(1)                limit.Execute(func() {                    go func(data map[string]string) {                        defer wg.Done()                        _,_ = m.createVirtualServices(ctx, data, namespace)                    }(data)                })            }            wg.Wait() // Wait for them after all goroutines are created

三国纷争

从我看到的你传递匿名函数到所以你的匿名函数将真正开始新的goroutine,但不是立即,但之后将调用这个匿名函数在内部的某个地方。limit.Executelimit.Execute但是,您可以传递一个函数,而不是传递N个匿名函数,然后该函数将有趣 N 个戈鲁丁var data map[string]stringlimit.Execute(func() {    for _, data = range MapList {        wg.Add(1)        go func(data map[string]string) {            defer wg.Done()            _,_ = m.createVirtualServices(ctx, data, namespace)        }(data)    }})wg.Wait()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go