Wykonuję test: porównaj czasy ekstrakcji cgo i czystych funkcji Go uruchom 100 milionów razy. Funkcja cgo zabiera więcej czasu w porównaniu z funkcją Golang i jestem zdezorientowany z tego wyniku. Mój kod jest testowanie:Dlaczego wydajność Cgo jest tak powolna? czy coś jest nie tak z moim kodem testowym?
package main
import (
"fmt"
"time"
)
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void show() {
}
*/
// #cgo LDFLAGS: -lstdc++
import "C"
//import "fmt"
func show() {
}
func main() {
now := time.Now()
for i := 0; i < 100000000; i = i + 1 {
C.show()
}
end_time := time.Now()
var dur_time time.Duration = end_time.Sub(now)
var elapsed_min float64 = dur_time.Minutes()
var elapsed_sec float64 = dur_time.Seconds()
var elapsed_nano int64 = dur_time.Nanoseconds()
fmt.Printf("cgo show function elasped %f minutes or \nelapsed %f seconds or \nelapsed %d nanoseconds\n",
elapsed_min, elapsed_sec, elapsed_nano)
now = time.Now()
for i := 0; i < 100000000; i = i + 1 {
show()
}
end_time = time.Now()
dur_time = end_time.Sub(now)
elapsed_min = dur_time.Minutes()
elapsed_sec = dur_time.Seconds()
elapsed_nano = dur_time.Nanoseconds()
fmt.Printf("go show function elasped %f minutes or \nelapsed %f seconds or \nelapsed %d nanoseconds\n",
elapsed_min, elapsed_sec, elapsed_nano)
var input string
fmt.Scanln(&input)
}
i wynik brzmi:
cgo show function elasped 0.368096 minutes or
elapsed 22.085756 seconds or
elapsed 22085755775 nanoseconds
go show function elasped 0.000654 minutes or
elapsed 0.039257 seconds or
elapsed 39257120 nanoseconds
Wyniki pokazują, że wywoływanie funkcji C jest mniejsza niż funkcja Go. Czy coś jest nie tak z moim kodem testowym?
Mój system: Mac OS X 10.9.4 (13E28)
Dlaczego według ciebie wywołanie funkcji C z Go powinno być szybsze niż wywołanie funkcji Go z Go? – Volker
Spodziewałbym się, że kod go wprowadzi do wersji go 'show()', co stanowi dodatkową zaletę dla kodu go w stosunku do 'C.show()'. –