티스토리 뷰
Photo by Honey Fangs on Unsplash
아주 잡다한 테스트이다. 정수를 역정렬하는 방법은 크게 두 개가 떠오르는데 둘 중 어느게 더 빠른지 알고 싶었다.
전체 테스트코드 링크: https://github.com/nicewook/golang-sort-reverse-test
첫 번째 방법은 sort.Reverse()를 활용하는 것이고, 두 번째 방법은 sort.Slice()를 이용하는 것이다.
첫 인상은 두 번째 방법이 빠를 것 같았다. 첫 번째 방법은 뭔가 세 번이나 감싸잖아? 하는 선입견이 컸다.
func sortReverse1(a []int) {
sort.Sort(sort.Reverse(sort.IntSlice(a)))
}
func sortReverse2(a []int) {
sort.Slice(a, func(i, j int) bool {
return a[i] > a[j]
})
}
하지만 실제로 돌려보니 첫 번째 방법이 더 빨랐다. 메모리를 좀 더 사용하는 대신 속도가 더 빠르다.
벤치마크 코드
func BenchmarkSortReverse(b *testing.B) {
a := make([]int, 100_000)
for i := range a {
a[i] = rand.Intn(100_000)
}
b.Run("sort using sort.Reverse", func(b *testing.B) {
for n := 0; n < b.N; n++ {
sortReverse1(a)
}
})
b.Run("sort using sort.Slice", func(b *testing.B) {
for n := 0; n < b.N; n++ {
sortReverse2(a)
}
})
}
결과는 아래와 같다
$ go test -bench=. -benchmem
goos: windows
goarch: amd64
pkg: sortreverse
cpu: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
BenchmarkSortReverse/sort_using_sort.Reverse-12 127 9259809 ns/op 40 B/op 2 allocs/op
BenchmarkSortReverse/sort_using_sort.Slice-12 253 4755820 ns/op 56 B/op 2 allocs/op
반응형
'golang' 카테고리의 다른 글
Golang: Marshaling 된 JSON을 Indent하여 보기 (0) | 2021.08.04 |
---|---|
Golang: next permutation을 구현해보자 (0) | 2021.05.17 |
Golang으로 Min Heap을 구현해보자 - container/heap 패키지 사용 (0) | 2021.05.04 |
Golang으로 Min Heap을 구현해보자 (0) | 2021.05.04 |
SOLID in GO - Dependency Inversion Principle (0) | 2021.04.05 |
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- clean agile
- go
- strange
- intellij
- Bug
- 제이펍
- 노션
- API
- 체호프
- 잡학툰
- bun
- 영화
- solid
- OpenAI
- 독서
- github
- 독서후기
- Shortcut
- golang
- ChatGPT
- 인텔리제이
- folklore
- 2023
- agile
- websocket
- Gin
- 티스토리챌린지
- notion
- 클린 애자일
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함