GoLang Channelとmutexの選択、性能は多くありません

3164 ワード

go公式はchanの使用をもっとお勧めするはずですhttps://github.com/golang/go/wiki/MutexOrChannel
次のコードは、パフォーマンスをテストするために使用されます.考え方が正しいことは保証されません.
package main

import (
    "fmt"
    "sync"
    "time"
)

type Op struct {
    key int
    val int
}

var lock sync.Mutex

var m1 map[int]int
var m2 map[int]int
var max int = 50000

func update_map_by_mutex(i int) {
    lock.Lock()
    m1[i] = i
    if len(m1) == max {
        fmt.Printf("%s mutex finish
"
, time.Now()) } lock.Unlock() } var ch chan Op func update_map_by_chan(i int) { ch func wait_for_chan(m map[int]int) { for { select { case op := if len(m2) == max { fmt.Printf("%s chan finish
"
, time.Now()) return } } } } func main() { m1 = make(map[int]int, max) m2 = make(map[int]int, max) ch = make(chan Op) go wait_for_chan(m2) for i := 0; i < max; i++ { go update_map_by_chan(i) go update_map_by_mutex(i) } time.Sleep(time.Second * 1) }

出力結果:
2015-11-17 17:08:18.06992 +0800 CST mutex finish 2015-11-17 17:08:18.0709215 +0800 CST chan finish
mutexは性能はやや良いが、chanはよりgo化され、より推奨されている.