Tôi đang làm một thử nghiệm: so sánh thời gian truy tìm của cgo và các hàm Go thuần túy chạy 100 triệu lần mỗi lần. Hàm cgo mất nhiều thời gian hơn so với hàm Golang, và tôi bị nhầm lẫn với kết quả này. thử nghiệm mã của tôi là:Tại sao hiệu suất của cgo quá chậm? có điều gì sai với mã thử nghiệm của tôi không?
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)
}
và kết quả là:
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
Kết quả cho thấy cách gọi chức năng C là chậm hơn so với chức năng Go. Có điều gì sai với mã thử nghiệm của tôi không?
hệ thống của tôi là: mac OS X 10.9.4 (13E28)
Tại sao bạn cho rằng gọi một hàm C từ Go nên nhanh hơn gọi hàm Go từ Go? – Volker
Tôi mong đợi mã đi vào nội tuyến phiên bản go của 'show()' là một lợi thế hơn nữa cho mã đi trên 'C.show()'. –