Golang 共享記憶體

qinhan發表於2020-02-24
  • Github
  • goalng 中使用共享記憶體

簡介

  • 本倉庫使用的是 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 協議》,轉載必須註明作者和本文連結

相關文章