Skip to content

Instantly share code, notes, and snippets.

@xujihui1985
Created May 25, 2016 09:23
Show Gist options
  • Save xujihui1985/996fcf8cb004852e51a5301d34dbc5c3 to your computer and use it in GitHub Desktop.
Save xujihui1985/996fcf8cb004852e51a5301d34dbc5c3 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"sync"
"time"
"github.com/xujihui1985/safemap/safemap"
)
func main() {
lock()
//cmap()
//safem()
}
func cmap() {
cm := safemap.NewCMap()
start := time.Now()
var wg sync.WaitGroup
wg.Add(4)
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
cm.Set(string(i), i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
cm.Set(string(i), i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
cm.Set(string(i), i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
cm.Set(string(i), i)
}
}()
wg.Wait()
end := time.Now()
fmt.Println(end.Sub(start))
}
func safem() {
sm := safemap.NewSafeMap()
start := time.Now()
var wg sync.WaitGroup
wg.Add(4)
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
sm.Insert(string(i), i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
sm.Insert(string(i), i)
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
sm.Update(string(i), func(x interface{}, found bool) interface{} {
if !found {
return 0
}
return x.(int) + 1
})
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
sm.Update(string(i), func(x interface{}, found bool) interface{} {
if !found {
return 0
}
return x.(int) + 1
})
}
}()
wg.Wait()
end := time.Now()
fmt.Println(end.Sub(start))
}
func lock() {
mu := &sync.Mutex{}
m := make(map[string]int)
var wg sync.WaitGroup
wg.Add(4)
start := time.Now()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
mu.Lock()
m[string(i)] = i
mu.Unlock()
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
mu.Lock()
m[string(i)] = i
mu.Unlock()
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
mu.Lock()
m[string(i)] = i
mu.Unlock()
}
}()
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
mu.Lock()
m[string(i)] = i
mu.Unlock()
}
}()
wg.Wait()
end := time.Now()
fmt.Println(end.Sub(start))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment