为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
交互式爱情 2022-10-04 16:46:02
我有一个函数来创建 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并执行我的函数。为什么?
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

因为你正在等待戈鲁丁在你开始后立即完成。试试这个:


            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


查看完整回答
反对 回复 2022-10-04
?
三国纷争

TA贡献1804条经验 获得超7个赞

从我看到的你传递匿名函数到所以你的匿名函数将真正开始新的goroutine,但不是立即,但之后将调用这个匿名函数在内部的某个地方。limit.Executelimit.Execute


但是,您可以传递一个函数,而不是传递N个匿名函数,然后该函数将有趣 N 个戈鲁丁


var data map[string]string


limit.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()


查看完整回答
反对 回复 2022-10-04
  • 2 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信