Golang 共享内存

Golang 共享内存

  • Github
  • golang 中使用共享内存

简介

  • 本仓库使用的是 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 协议》,转载必须注明作者和本文链接
qinhan
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!