V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hujianxin
V2EX  ›  程序员

不清楚具体会有多少个 goroutines,但是想要等他们都结束,该怎么做

  •  
  •   hujianxin · 2019-10-12 10:09:49 +08:00 · 1710 次点击
    这是一个创建于 1871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个需求如下:

    1. 随着用户的操作,服务器动态生成很多 goroutines
    2. 在用户调用某个接口时,结束整个操作,但是要等所有 goroutines 结束

    之前用 WaitGroup,但是这个好像不太满足这种场景呢,这种场景开始时并不清楚有多少个 goroutines 会产生,也不清楚哪一个运行时间长。

    哪位大佬帮忙指点迷津,多谢

    10 条回复    2019-10-12 12:56:03 +08:00
    mengzhuo
        1
    mengzhuo  
       2019-10-12 10:16:13 +08:00
    官方包的 context 就是你要的
    SmiteChow
        2
    SmiteChow  
       2019-10-12 10:19:52 +08:00
    没写过 go,但通用的思路是 create coroutine 记录一下 instance 到 global
    qieqie
        3
    qieqie  
       2019-10-12 11:08:08 +08:00
    WaitGroup 可以满足你的需求
    hujianxin
        4
    hujianxin  
    OP
       2019-10-12 11:27:43 +08:00
    @qieqie 应该是可以,waitgroup 可以动态的 add,我正在继续测试,多谢
    YakuMioto
        5
    YakuMioto  
       2019-10-12 11:32:19 +08:00
    WaitGroup 我都是用来解决程序何时退出的, 我觉得这个是用来控制大局观的, 看你的描述, 我觉得 context 最合适. 同 1L.
    Vegetable
        6
    Vegetable  
       2019-10-12 11:37:06 +08:00
    这就是 waitgroup
    lazyfighter
        7
    lazyfighter  
       2019-10-12 11:37:07 +08:00
    为什么我感觉应该用 channel 呢,用户操作发个信号然后 goroute 退出
    abel1989
        8
    abel1989  
       2019-10-12 11:40:00 +08:00
    context 你值得拥有
    reus
        9
    reus  
       2019-10-12 12:32:47 +08:00
    通知结束用 context,等待结束用 wait group

    https://play.golang.org/p/GGOY8mugpw4
    hujianxin
        10
    hujianxin  
    OP
       2019-10-12 12:56:03 +08:00
    @reus 嗯呢,了解了,我这种情况是等待结束。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:54 · PVG 10:54 · LAX 18:54 · JFK 21:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.