我正在尝试并行运行一个函数....当我这样做时
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的函数,请帮忙。
答案 0 :(得分:3)
请记住,goroutines提供并发性,concurrency is not parallelism。
你的第一个例子中的问题是你正在读取for循环中的无缓冲通道,因此goroutine中发生的写操作被序列化,等待读取。将读取移动到for循环之外,和/或将读取放入其自己的goroutine中,您可能会看到更多的并行化。