generic 사용에 대한 고민이 됩니다.
전체적인 리팩토링을 앞에 두고 여러 차례 이것저것 검증하려 합니다.
그래서 간단한 루프로 성능 시험을 해보았습니다.
성능 저하가 존재 할지. 간단한 코드라 결론 내리긴 어렵지만 '양호'합니다.
loop code : None generic
package main
import (
"fmt"
"runtime"
"time"
)
func procInt(v, o int) bool {
if v > o {
return true
} else {
return false
}
}
func procStr(v, o string) bool {
if v > o {
return true
} else {
return false
}
}
func main() {
numCpu := runtime.NumCPU() / 2
fmt.Println(fmt.Sprintf("CPU : %d", numCpu)) // CPU : AMD Ryzen 8 2700X
fmt.Println(fmt.Sprintf("go version %s", runtime.Version()))
runtime.GOMAXPROCS(numCpu)
fmt.Println(time.Now())
for i := 0; i < 1000000000; i++ {
procInt(i, 0)
procStr(string(i), "0")
}
fmt.Println(time.Now())
}
3차례 시도
#1차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:41:55.4592372 +0900 KST m=+0.007353701
2023-03-03 23:42:06.2914735 +0900 KST m=+10.839590001
Process finished with the exit code 0
#2차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:43:15.3723488 +0900 KST m=+0.006212901
2023-03-03 23:43:26.2375463 +0900 KST m=+10.871410401
Process finished with the exit code 0
#3차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:43:44.5182561 +0900 KST m=+0.006716801
2023-03-03 23:43:55.2810682 +0900 KST m=+10.769528901
Process finished with the exit code 0
loop code : generic
비슷한 조건으로 generic 으로 하고 구동.
package main
import (
"fmt"
"runtime"
"time"
)
type GenericTypes interface{ int | string }
func proc[T GenericTypes](v, o T) bool {
if v > o {
return true
} else {
return false
}
}
func main() {
numCpu := runtime.NumCPU() / 2
fmt.Println(fmt.Sprintf("CPU : %d", numCpu)) // CPU : AMD Ryzen 7 2700X
fmt.Println(fmt.Sprintf("go version %s", runtime.Version()))
runtime.GOMAXPROCS(numCpu)
fmt.Println(time.Now())
for i := 0; i < 1000000000; i++ {
proc(i, 0)
proc(string(i), "0")
}
fmt.Println(time.Now())
}
똑같이 3차례 시도.
#1차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:44:16.8499311 +0900 KST m=+0.006185901
2023-03-03 23:44:27.6919352 +0900 KST m=+10.848190001
Process finished with the exit code 0
#2차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:45:06.1961479 +0900 KST m=+0.006721401
2023-03-03 23:45:17.004015 +0900 KST m=+10.814588501
Process finished with the exit code 0
#3차 시도
CPU : 8
go version go1.18.3
2023-03-03 23:45:28.2865686 +0900 KST m=+0.007180101
2023-03-03 23:45:39.1489295 +0900 KST m=+10.869541001
Process finished with the exit code 0
결론: 아직 큰 차이는 없습니다.
차 후, 다른 테스트를 해봐야겠습니다.
'Go언어 golang' 카테고리의 다른 글
golang Syslog server / Go언어 Syslog collector #1 (0) | 2023.03.10 |
---|---|
golang pretty progress bar (0) | 2023.03.09 |
고랭 엑셀 - golang excel #3 차트 삽입 (0) | 2023.03.08 |
고랭 엑셀 - golang excel #2 스타일 기본 (0) | 2023.03.05 |
고랭 엑셀 - golang excel #1 (0) | 2023.03.04 |