gpt4 book ai didi

go - 普通go func和go func中for循环的区别

转载 作者:IT王子 更新时间:2023-10-29 02:26:17 24 4
gpt4 key购买 nike

我对普通 go func 和 go func 中的 for 循环之间的区别有一些疑问:

  1. 普通函数:

    func asyncTask(){
    //...something
    }

    为了触发asyncTask,我们可以简单地:

    func main(){
    go asyncTask()
    }
  2. 制作一个for循环来监控 channel :

    func (c *Container) asyncTask(){
    go func(){
    for {
    select {
    case <- c.someChan:
    //...do something
    case <-c.ctx.Done():
    //...prevent leaking
    }
    }
    }()
    }

    触发:

    func (c *Container) trigger(){
    c.someChan <- val
    }

我的问题是:

  1. 我理解第二种情况最适合我们希望在队列中管理异步任务的情况。但是对于频繁触发的异步任务(不能阻塞)的性能来说,哪种方法更好?

  2. 在 GoLang 中处理异步任务一般有什么最佳实践吗?

最佳答案

几乎在任何情况下,性能都不是选择使用哪种模式(两者都可以)时要考虑的事情,而是在您的特定用例中哪种用法有意义。如果您使用模式 (1),则无法保证 (2) 的顺序处理。这是你的两个例子之间的本质区别。因此,例如对于 http 服务器,您可以使用前一种模式(go handleRequest(r HttpRequest) say)来并行处理请求,但使用后者来确保某些操作按顺序处理。我希望这能回答您的问题!

关于go - 普通go func和go func中for循环的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48374170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com