Go 为什么';t并发加速斐波那契函数?

Go 为什么';t并发加速斐波那契函数?,go,concurrency,goroutine,Go,Concurrency,Goroutine,下面是一个Go教程中的并发示例 package main import ( "fmt" ) func fibonacci(n int, c chan int) { x, y := 0, 1 for i := 0; i < n; i++ { c <- x x, y = y, x+y } close(c) } func main() { c := make(chan int, 10) go fi

下面是一个Go教程中的并发示例

package main

import (
    "fmt"
)

func fibonacci(n int, c chan int) {
    x, y := 0, 1
    for i := 0; i < n; i++ {
        c <- x
        x, y = y, x+y
    }
    close(c)
}

func main() {
    c := make(chan int, 10)
    go fibonacci(cap(c), c)
    for i := range c {
        fmt.Println(i)
    }
}
主程序包
进口(
“fmt”
)
func fibonacci(n int,c chan int){
x、 y:=0,1
对于i:=0;ic这两个版本所用的时间几乎完全相同,因为大部分工作都在斐波那契函数中,所以不管它是在主goroutine上运行,还是在单独的goroutine上运行。当
n
较大时,并发版本可能会较慢,因为通道上的通信开销较大

从上图中可以看出,在主线程上运行的唯一工作是“Println”调用,它只需要很少的时间运行。
但是,如果主线程上的数字处理需要更多时间,则使用goroutine生成斐波那契数字可能会更快。

第一步是使代码不“近乎即时”——对于性能分析,应该建立一个“并非无关紧要”的基线D:并发!=并行。@user2864740将n增加到1并发代码大约慢30-50%。665ms比428ms。我运行了10次只是为了说明差异。
package main

import (
    "fmt"
)



func fibonacci(n int) int{


    if(n==0||n==1){
        return 1
    }
    x:= 1
    y:= 1
    for i := 0; i < n; i++ {
        tmp := x
        x = y
        y = tmp + y
        fmt.Println(x)
    }
    return x
}


func main(){


    fibonacci2(100)

}