我已經構建了一個流行數學模型,它在Go中的計算量非常強。我現在正在嘗試構建一套系統來測試我的模型,在那裏我改變了一個輸入並期望得到一個不同的輸出。我建立了一個系列的版本,以緩慢增加艾滋病毒流行率,並看到對艾滋病毒死亡的影響。它需要大約200毫秒的時間才能運行。Go-lang平行段運行速度比系列段慢
for q = 0.0; q < 1000; q++ {
inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] = inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] * float32(math.Pow(1.00001, q))
results := costAnalysisHandler(inputs)
fmt.Println(results.HivDeaths[20])
}
然後,我使用多個信道進行了「平行」的版本,它需要更長的,〜400毫秒來運行。這些小小的變化很重要,因爲我們將用不同的輸入來運行數百萬次運行,所以想盡可能提高效率。這裏是水貨版本:
ch := make(chan ChData)
var q float64
for q = 0.0; q < 1000; q++ {
go func(q float64, inputs *costanalysis.Inputs, ch chan ChData) {
inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] = inputs.CountryProfile.HivPrevalenceAdultsByGroup[0] * float32(math.Pow(1.00001, q))
results := costAnalysisHandler(inputs)
fmt.Println(results.HivDeaths[20])
ch <- ChData{int(q), results.HivDeaths[20]}
}(q, inputs, ch)
}
for q = 0.0; q < 1000; q++ {
theResults := <-ch
fmt.Println(theResults)
}
任何想法非常讚賞。