私はGoを学び始めました、楽しく簡単です。しかし、私はgoroutinesを使って作業しても、パフォーマンスにほとんど影響しませんでした。Goroutineのパフォーマンス
私は順次2つの機能では100万個の数字2回追加しようとすると:それは5ミリ秒かかり
package main
import (
"fmt"
"time"
)
var sumA int
var sumB int
func fSumA() {
for i := 0; i < 1000000; i++ {
sumA += i
}
}
func fSumB() {
for i := 0; i < 1000000; i++ {
sumB += i
}
}
func main() {
start := time.Now()
fSumA()
fSumB()
sum := sumA + sumB
fmt.Println("Elapsed time", time.Since(start))
fmt.Println("Sum", sum)
}
を。
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.724406ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.358165ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.042528ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.469628ms
Suma total 999999000000
私は2つのゴルーチンで同じことをやろう
:package main
import (
"fmt"
"sync"
"time"
)
var wg sync.WaitGroup
var sumA int
var sumB int
func fSumA() {
for i := 0; i < 1000000; i++ {
sumA += i
}
wg.Done()
}
func fSumB() {
for i := 0; i < 1000000; i++ {
sumB += i
}
wg.Done()
}
func main() {
start := time.Now()
wg.Add(2)
go fSumA()
go fSumB()
wg.Wait()
sum := sumA + sumB
fmt.Println("Elapsed time", time.Since(start))
fmt.Println("Sum", sum)
}
私は、5ミリ秒、多かれ少なかれ、同じ結果を得ることができます。私のコンピュータはMacBook Pro(Core 2 Duo)です。パフォーマンスの改善は見られません。多分プロセッサーですか?あなたはgolangs独自のベンチマークツールでこれをテストする方法をここで
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.258415ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.528498ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.273565ms
Suma total 999999000000
MacBook-Pro-de-Pedro:hello pedro$ ./bin/hello
Elapsed time 5.539224ms
Suma total 999999000000
私はあなたのCPUがどれくらい速く1百万になるかをはるかに過大評価していると思います。ミリ秒単位で表示するには十分な作業ではありません。 5msはほぼすべてのプロセスの起動であり、コンソールに出力します。 – captncraig
また、実行しているバージョンは何ですか。 'go version'? – captncraig
このようなベンチマークを行う場合は、「go test」ベンチマークを使用します。少なくとも合理的な入力番号を得て、多くの実行結果を平均します。 – JimB