如何在Go中并行调用函数

时间:2017-04-18 16:38:53

标签: go parallel-processing

我正在尝试并行运行一个函数....当我这样做时

func runParallel() {
    var out [5]chan string
    for i := range out {
        out[i] = make(chan string)
    }
    for j:=0; j<2; j++ {
        fmt.Println("\nStarting: ", j)
        go func() {
            out[0] <- f3(4)
        }()

        fmt.Println(<-out[0])
    }
}

func main() {    
    runParallel()
}

我看到该函数被一个接一个地串行调用...但是当我这样做时...

func runParallel() {
    var out [5]chan string
    for i := range out {
        out[i] = make(chan string)
    }

    fmt.Println("\nStarting: ", j)
    go func() {
        out[0] <- f3(4)
    }()
    go func() {
        out[0] <- f3(4)
    }()

    fmt.Println(<-out[0])
}

func main() {    
    runParallel()
}

该函数被称为并行。

我需要在for循环中获得名为parallel的函数,请帮忙。

1 个答案:

答案 0 :(得分:3)

请记住,goroutines提供并发性,concurrency is not parallelism

你的第一个例子中的问题是你正在读取for循环中的无缓冲通道,因此goroutine中发生的写操作被序列化,等待读取。将读取移动到for循环之外,和/或将读取放入其自己的goroutine中,您可能会看到更多的并行化。