gf 프레임 워 크 의 병발 안전 용기 - gmap 및 sync. Map 과 의 성능 비교

2354 단어 golang
관련 링크:http://gf.johng.cn/494392
gf 프레임 워 크 는 몇 개의 매우 실 용적 인 병렬 안전 용 기 를 제공 하 는데 그 중에서 gmap 는 프로젝트 개발 에서 가장 자주 사용 하 는 것 이다.
gmap 구체 적 인 방법 은 godoc 를 참고 하 세 요:https://godoc.org/github.com/...
gmap 내부 에는 여러 가지 유형의 구조 체 정의 가 있 는데 그것 이 바로 IntBoolMap, IntIntMap, IntInterfaceMap, IntStringMap, InterfaceInterfaceMap, StringBoolMap, StringIntMap, StringInterfaceMap, StringStringMap, UintInterfaceMap 이다.
실행 효율 을 고려 하여 서로 다른 수요 장면 을 바탕 으로 적당 한 유형 구조 체 를 선택 하면 집행 효율 이 다 릅 니 다. 다음은 기준 테스트 를 사용 하여 각 유형의 기록 성능 (테스트 코드) 을 비교 합 니 다.
john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gmap$ go test gmap_test.go -bench=".*"
goos: linux
goarch: amd64
BenchmarkIntBoolMap_Set-8                  10000000           171 ns/op
BenchmarkIntIntMap_Set-8                   10000000           181 ns/op
BenchmarkIntInterfaceMap_Set-8             10000000           227 ns/op
BenchmarkIntStringMap_Set-8                10000000           271 ns/op
BenchmarkInterfaceInterfaceMap_Set-8        5000000           331 ns/op
BenchmarkStringBoolMap_Set-8                5000000           271 ns/op
BenchmarkStringIntMap_Set-8                 5000000           300 ns/op
BenchmarkStringInterfaceMap_Set-8           5000000           363 ns/op
BenchmarkStringStringMap_Set-8              5000000           394 ns/op
BenchmarkUintInterfaceMap_Set-8            10000000           275 ns/op
PASS
ok      command-line-arguments    37.024s

또한, go 언어 는 1.9 버 전부터 동시 다발 안전 을 지원 하 는 sync. Map 을 도 입 했 습 니 다. 기준 테스트 결과 가 어떤 지 살 펴 보 겠 습 니 다.
john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gmap$ go test *.go -bench=".*"
goos: linux
goarch: amd64
BenchmarkGmapSet-8            10000000           181 ns/op
BenchmarkSyncmapSet-8          5000000           366 ns/op
BenchmarkGmapGet-8            30000000            82.6 ns/op
BenchmarkSyncmapGet-8         20000000            95.7 ns/op
BenchmarkGmapRemove-8         20000000            69.8 ns/op
BenchmarkSyncmapRmove-8       20000000            93.6 ns/op
PASS
ok      command-line-arguments    27.950s

sync. Map 의 소스 코드 를 보면 그 실현 원 리 는 gmap. InterfaceInterfaceMap 이라는 유형의 구조 체 와 유사 하지만 효율 은 gmap. InterfaceInterfaceMap 보다 높 지 않다 는 것 을 알 수 있다.
따라서 안전 한 gmap 가방 을 지원 하 는 효율 이 상당히 높 은 것 으로 나 타 났 다.

좋은 웹페이지 즐겨찾기