Mercurial > mercurial > hgweb_golang.cgi
changeset 38:05bdd37e3000
add channel-sample.
author | pyon@macmini |
---|---|
date | Sat, 11 Jan 2020 17:00:30 +0900 |
parents | 43adde439537 |
children | 523416ca4b83 |
files | src/chan.go |
diffstat | 1 files changed, 60 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/chan.go Sat Jan 11 17:00:30 2020 +0900 @@ -0,0 +1,60 @@ +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) +} +