我有兩個問題:概念,是一個正確的做法,使用夠程(這有什麼錯我的代碼)
一)是否有意義旋轉起來多夠程在一個循環的類似計算數學結果?
b)爲什麼我的代碼不工作(這是我第一次嘗試goroutines)?我猜這與關閉頻道有關。
package main
import (
"fmt"
"math"
"sync"
)
func main() {
input := [][]int{
[]int{10, 9},
[]int{5, 2},
[]int{4, 9},
}
var wg sync.WaitGroup
c := make(chan int)
for _, val := range input {
wg.Add(1)
go func(coordinates []int, c chan int) {
defer wg.Done()
c <- calculateDistance(coordinates[0], coordinates[1])
}(val, c)
}
distances := []int{}
for val := range c {
distances = append(distances, val)
}
wg.Wait()
fmt.Println(distances)
}
func calculateDistance(x int, y int) int {
v := math.Exp2(float64(x)) + math.Exp2(float64(y))
distance := math.Sqrt(v)
return int(distance)
}
遊樂場鏈路:https://play.golang.org/p/0iJ9hFnb8R
明確你的意思是「不起作用」。 – Peter
致命錯誤:所有goroutines都睡着了 - 僵局! 夠程1瓚收到]: main.main() \t /tmp/sandbox241190633/main.go:27 + 0x2e0 – nbsp
當你得到它的工作,你可以學習如何運行基準測試,看它是否使用夠程的價值。作爲一個觀點,這還不夠數字琢磨去做出很多改變。當你運行一些阻塞的代碼時,通常你會使用goroutine,比如磁盤或網絡中的'io'。 goroutine(可能是主要的)會阻止數據的等待,浪費時間你可能會用空閒的CPU做其他事情。 https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go – RayfenWindspear