Slide 1

Slide 1 text

Oğuzhan Yılmaz Go Performans Rehberi

Slide 2

Slide 2 text

min. Go 1.14

Slide 3

Slide 3 text

if > switch

Slide 4

Slide 4 text

13.5 ns/op 15.5 ns/op

Slide 5

Slide 5 text

12.1 ns/op

Slide 6

Slide 6 text

strconv > fmt

Slide 7

Slide 7 text

BenchmarkStrconv-16 19381725 67.5 ns/op 32 B/op 1 allocs/op BenchmarkFmt-16 5839038 222 ns/op 72 B/op 3 allocs/op 67.5 ns/op

Slide 8

Slide 8 text

make([]int, 0, 10) > []int{}

Slide 9

Slide 9 text

BenchmarkMakeSliceWithCap-16 1000000000 0.234 ns/op 0 B/op 0 allocs/op BenchmarkMakeSlice-16 65739 17390 ns/op 16376 B/op 11 allocs/op 0.234 ns/op

Slide 10

Slide 10 text

strings.Builder > “a” + “b”

Slide 11

Slide 11 text

BenchmarkStringBuildNaive-16 6573120 174 ns/op 32 B/op 6 allocs/op BenchmarkStringBuildBuilder-16 19740784 62.4 ns/op 64 B/op 1 allocs/op 62.4 ns/op

Slide 12

Slide 12 text

bytes.Replace > strings.Replace bytes Concat > strings Concat bytes Concat > strings Join

Slide 13

Slide 13 text

70.1 ns/op BenchmarkBytesReplace-4 20000000 70.1 ns/op 32 B/op 1 allocs/op BenchmarkStringsReplace-4 10000000 132 ns/op 64 B/op 2 allocs/op

Slide 14

Slide 14 text

https://github.com/valyala/fasthttp

Slide 15

Slide 15 text

binary.BigEndian.PutUint32 > binary.Write

Slide 16

Slide 16 text

1075 ns/op 113 ns/op

Slide 17

Slide 17 text

sync.Pool

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

_ = make([]byte, 10<<30)

Slide 20

Slide 20 text

runtime.MemProfileRate = 0 https://golang.org/pkg/runtime/

Slide 21

Slide 21 text

syscal.SYS_MMAP

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

map[int]int{} > map[string]int{}

Slide 24

Slide 24 text

3 ms/op

Slide 25

Slide 25 text

json.Marshal(Struct) > json.Marshal(Map)

Slide 26

Slide 26 text

BenchmarkMarshallStruct-16 4721078 230 ns/op 64 B/op 2 allocs/op BenchmarkMakeSlice-16 1843551 665 ns/op 512 B/op 10 allocs/op 230 ns/op

Slide 27

Slide 27 text

Atomic > Mutex

Slide 28

Slide 28 text

BenchmarkIncrementMutex-16 87149690 12.3 ns/op 0 B/op 0 allocs/op BenchmarkIncrementMutexNoDefer-16 99812758 12.2 ns/op 0 B/op 0 allocs/op BenchmarkIncrementAtomic-16 286304998 4.19 ns/op 0 B/op 0 allocs/op BenchmarkConcurrentMutex-16 226051 5104 ns/op 16 B/op 1 allocs/op BenchmarkConcurrentMutexNoDefer-16 235743 4941 ns/op 16 B/op 1 allocs/op BenchmarkConcurrentAtomic-16 260210 4635 ns/op 16 B/op 1 allocs/op 4.19 ns/op

Slide 29

Slide 29 text

1. https://github.com/dgryski/go-perfbook/blob/master/performance.md 2. https://stephen.sh/posts/quick-go-performance-improvements 3. https://hashrocket.com/blog/posts/go-performance-observations 4. https://gist.github.com/vitalyisaev2/5791627ffc48f10c2fde22c2a5dd32ee