gf 프레임 워 크 의 병발 안전 용기 - gmap 및 sync. Map 과 의 성능 비교
2354 단어 golang
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 가방 을 지원 하 는 효율 이 상당히 높 은 것 으로 나 타 났 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.