view src/chan.go @ 39:523416ca4b83

diet magicpacket.go
author pyon@macmini
date Tue, 04 Feb 2020 21:31:50 +0900
parents 05bdd37e3000
children
line wrap: on
line source

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("- Channel Test with Fibonacci -")
    var t time.Time
    n, nfib := 0, 0

    n, t = 25, time.Now()
    nfib = fib(n)
    fmt.Printf("n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))

    n, t = 45, time.Now()
    nfib = fib(n)
    fmt.Printf("n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))

    fmt.Println()
    fmt.Println("- Channel Test with Fibonacci #2 -")
    ch1 := make(chan int)
    ch2 := make(chan int)

    n, t = 45, time.Now()
    go func(n int) {
        nfib := fib(n)
        fmt.Printf("goroutine: n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))
        ch1 <- nfib
    }(n)

    n, t = 25, time.Now()
    go func(n int) {
        nfib := fib(n)
        fmt.Printf("goroutine: n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))
        ch2 <- nfib
    }(n)

    n, t = 35, time.Now()
    nfib = fib(n)
    fmt.Printf("    -    : n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))

    <- ch1
    <- ch2

    n, t = 5, time.Now()
    nfib = fib(n)
    fmt.Printf("    -    : n=%d nfib=%d [%v]\n", n, nfib, time.Since(t))

    fmt.Println("- End -")
}

func fib(x int) int {
    if x < 2 {
        return x
    }
    return fib(x - 1) + fib(x - 2)
}