簡介
- 本倉庫使用的是
shm
共享記憶體而非 mmap
- 本倉庫提供了兩個共享記憶體的建構函式
- NewSingleShm : 只可以是一個生產者 & 一個消費者
- NewMultiShm : 可以 多個生產者 & 一個消費者
- 具體的實現思路是基於範健的這篇分享,在此也感謝作者
- 上述分享主要是一個無鎖佇列的實現,我在此基礎上套上了一層共享記憶體
安裝
go get github.com/overtalk/shm
使用
package main
import (
"fmt" "github.com/overtalk/shm")
type LogItem struct { ProtocolName string
Fields []string
Data []interface{}}
func testConstructor() interface{} {
return &LogItem{}
}
func main() {
s, err := shm.NewMultiShm(6, 10000, testConstructor)
if err != nil { fmt.Println(err)
return }
for i := 0; i < 10; i++ {
item := &LogItem{
ProtocolName: "1",
Fields: []string{fmt.Sprintf("field-%d", i)},
Data: []interface{}{i},
} if err := s.Save(item); err != nil { fmt.Println(err)
return } }
items, err := s.Get()
if err != nil { fmt.Println(err)
return }
for _, v := range items { fmt.Printf("value : %v, type = %T\n", v, v)
}}
本作品採用《CC 協議》,轉載必須註明作者和本文連結