mgnsk / go-evmap

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

POC non-blocking read-write map. The tradeoff exposed here is 2x the memory usage due to swapping between two maps.

Inspired by: https://www.youtube.com/watch?v=s19G6n0UjsM

The first initial version of "just getting it to work". Can't beat sync.Map and write performance is slow.

Run benchmark with $ docker run --rm --mount type=bind,source="$(pwd)",target=/evmap -w /evmap golang:alpine go test -count=1 -v -run=. -bench=. ./...

Passes the race detector when run as go test -race -count=1 -v -run=. -bench=. ./... albeit slowly.

=== RUN   TestMap
--- PASS: TestMap (0.00s)
goos: linux
goarch: amd64
pkg: github.com/mgnsk/evmap
BenchmarkEvMapReadSync
BenchmarkEvMapReadSync/read
BenchmarkEvMapReadSync/read/single_writer_single_reader
BenchmarkEvMapReadSync/read/single_writer_single_reader-4                8752372               127 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapReadSync/read/multi_writer_single_reader
BenchmarkEvMapReadSync/read/multi_writer_single_reader-4                 5005664               202 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapReadSync/read/single_writer_multi_reader
BenchmarkEvMapReadSync/read/single_writer_multi_reader-4                21856057                46.2 ns/op             0 B/op          0 allocs/op
BenchmarkEvMapReadSync/read/multi_writer_multi_reader
BenchmarkEvMapReadSync/read/multi_writer_multi_reader-4                 12506944               113 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapRead100Millisecond
BenchmarkEvMapRead100Millisecond/read
BenchmarkEvMapRead100Millisecond/read/single_writer_single_reader
BenchmarkEvMapRead100Millisecond/read/single_writer_single_reader-4             13871166               104 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapRead100Millisecond/read/multi_writer_single_reader
BenchmarkEvMapRead100Millisecond/read/multi_writer_single_reader-4               6026190               185 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapRead100Millisecond/read/single_writer_multi_reader
BenchmarkEvMapRead100Millisecond/read/single_writer_multi_reader-4              23838170                46.9 ns/op             0 B/op          0 allocs/op
BenchmarkEvMapRead100Millisecond/read/multi_writer_multi_reader
BenchmarkEvMapRead100Millisecond/read/multi_writer_multi_reader-4               18426666               110 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapRead
BenchmarkMutexMapRead/read
BenchmarkMutexMapRead/read/single_writer_single_reader
BenchmarkMutexMapRead/read/single_writer_single_reader-4                         1000000              2403 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapRead/read/multi_writer_single_reader
BenchmarkMutexMapRead/read/multi_writer_single_reader-4                           636568              4955 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapRead/read/single_writer_multi_reader
BenchmarkMutexMapRead/read/single_writer_multi_reader-4                          1388348              1140 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapRead/read/multi_writer_multi_reader
BenchmarkMutexMapRead/read/multi_writer_multi_reader-4                           1360434               999 ns/op               0 B/op          0 allocs/op
BenchmarkSyncMapRead
BenchmarkSyncMapRead/read
BenchmarkSyncMapRead/read/single_writer_single_reader
BenchmarkSyncMapRead/read/single_writer_single_reader-4                         14548926                83.0 ns/op             5 B/op          0 allocs/op
BenchmarkSyncMapRead/read/multi_writer_single_reader
BenchmarkSyncMapRead/read/multi_writer_single_reader-4                          10583112               113 ns/op              14 B/op          0 allocs/op
BenchmarkSyncMapRead/read/single_writer_multi_reader
BenchmarkSyncMapRead/read/single_writer_multi_reader-4                          30319982                38.1 ns/op             1 B/op          0 allocs/op
BenchmarkSyncMapRead/read/multi_writer_multi_reader
BenchmarkSyncMapRead/read/multi_writer_multi_reader-4                           27150357                56.0 ns/op             5 B/op          0 allocs/op
BenchmarkEvMapWriteSync
BenchmarkEvMapWriteSync/write
BenchmarkEvMapWriteSync/write/single_writer_single_reader
BenchmarkEvMapWriteSync/write/single_writer_single_reader-4                      1824427               649 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWriteSync/write/multi_writer_single_reader
BenchmarkEvMapWriteSync/write/multi_writer_single_reader-4                        763472              1620 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWriteSync/write/single_writer_multi_reader
BenchmarkEvMapWriteSync/write/single_writer_multi_reader-4                          3822           1930265 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWriteSync/write/multi_writer_multi_reader
BenchmarkEvMapWriteSync/write/multi_writer_multi_reader-4                            100          23744591 ns/op             196 B/op          0 allocs/op
BenchmarkEvMapWrite100Millisecond
BenchmarkEvMapWrite100Millisecond/write
BenchmarkEvMapWrite100Millisecond/write/single_writer_single_reader
BenchmarkEvMapWrite100Millisecond/write/single_writer_single_reader-4            4166439               262 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWrite100Millisecond/write/multi_writer_single_reader
BenchmarkEvMapWrite100Millisecond/write/multi_writer_single_reader-4             1546425               836 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWrite100Millisecond/write/single_writer_multi_reader
BenchmarkEvMapWrite100Millisecond/write/single_writer_multi_reader-4             2876132               417 ns/op               0 B/op          0 allocs/op
BenchmarkEvMapWrite100Millisecond/write/multi_writer_multi_reader
BenchmarkEvMapWrite100Millisecond/write/multi_writer_multi_reader-4              1238622              1054 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapWrite
BenchmarkMutexMapWrite/write
BenchmarkMutexMapWrite/write/single_writer_single_reader
BenchmarkMutexMapWrite/write/single_writer_single_reader-4                       1387116              3001 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapWrite/write/multi_writer_single_reader
BenchmarkMutexMapWrite/write/multi_writer_single_reader-4                         877587              5249 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapWrite/write/single_writer_multi_reader
BenchmarkMutexMapWrite/write/single_writer_multi_reader-4                         466520              4555 ns/op               0 B/op          0 allocs/op
BenchmarkMutexMapWrite/write/multi_writer_multi_reader
BenchmarkMutexMapWrite/write/multi_writer_multi_reader-4                          275862              6844 ns/op               0 B/op          0 allocs/op
BenchmarkSyncMapWrite
BenchmarkSyncMapWrite/write
BenchmarkSyncMapWrite/write/single_writer_single_reader
BenchmarkSyncMapWrite/write/single_writer_single_reader-4                        6667801               181 ns/op              16 B/op          1 allocs/op
BenchmarkSyncMapWrite/write/multi_writer_single_reader
BenchmarkSyncMapWrite/write/multi_writer_single_reader-4                        12297567                82.8 ns/op            16 B/op          1 allocs/op
BenchmarkSyncMapWrite/write/single_writer_multi_reader
BenchmarkSyncMapWrite/write/single_writer_multi_reader-4                         4971781               230 ns/op              16 B/op          1 allocs/op
BenchmarkSyncMapWrite/write/multi_writer_multi_reader
BenchmarkSyncMapWrite/write/multi_writer_multi_reader-4                         10579861               109 ns/op              16 B/op          1 allocs/op
PASS
ok      github.com/mgnsk/evmap  67.431s

About


Languages

Language:Go 100.0%