婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言共享內存讀寫實例分析

Go語言共享內存讀寫實例分析

熱門標簽:海外照相館地圖標注入駐 經常接到推銷電話機器人的電話 客服級電銷機器人 外呼系統多少錢一年 外呼系統如何接收服務密碼 智能營銷軟件 旅游廁所如何電子地圖標注 滁州自建外呼系統 工商信用卡外呼系統教程

本文實例分析了Go語言共享內存讀寫的方法。分享給大家供大家參考。具體分析如下:

前面分析了Go語言指針運算和內嵌C代碼的方法,做了一個Go語言共享內存讀寫的實驗。

先大概說下什么是共享內存。我們知道不同進程見的內存是互相獨立的,沒辦法直接互相操作對方內的數據,而共享內存則是靠操作系統提供的內存映射機制,讓不同進程的一塊地址空間映射到同一個虛擬內存區域上,使不同的進程可以操作到一塊共用的內存塊。共享內存是效率最高的進程間通訊機制,因為數據不需要在內核和程序之間復制。

共享內存用到的是系統提供的mmap函數,它可以將一個文件映射到虛擬內存的一個區域中,程序使用指針引用這個區域,對這個內存區域的操作會被回寫到文件上,Go內置的syscall包中有mmap函數,但是它是經過封裝的,返回的是[]byte,沒辦法做我需求的指針運算,所以我還是用cgo來調用原生的mmap。

實驗分為讀和寫兩個程序,這樣我們可以觀察到讀進程可以讀到寫進程寫入共享內存的信息。

下面是shm_writer.go的代碼:

復制代碼 代碼如下:
package main
/*
#cgo linux LDFLAGS: -lrt
#include fcntl.h>
#include unistd.h>
#include sys/mman.h>
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int my_shm_new(char *name) {
    shm_unlink(name);
    return shm_open(name, O_RDWR|O_CREAT|O_EXCL, FILE_MODE);
}
*/
import "C"
import (
    "fmt"
    "unsafe"
)
const SHM_NAME = "my_shm"
const SHM_SIZE = 4 * 1000 * 1000 * 1000
type MyData struct {
    Col1 int
    Col2 int
    Col3 int
}
func main() {
    fd, err := C.my_shm_new(C.CString(SHM_NAME))
    if err != nil {
        fmt.Println(err)
        return
    }
    C.ftruncate(fd, SHM_SIZE)
    ptr, err := C.mmap(nil, SHM_SIZE, C.PROT_READ|C.PROT_WRITE, C.MAP_SHARED, fd, 0)
    if err != nil {
        fmt.Println(err)
        return
    }
    C.close(fd)
    data := (*MyData)(unsafe.Pointer(ptr))
    data.Col1 = 100
    data.Col2 = 876
    data.Col3 = 8021
}

下面是shm_reader.go的代碼:

復制代碼 代碼如下:
package main
/*
#cgo linux LDFLAGS: -lrt
#include fcntl.h>
#include unistd.h>
#include sys/mman.h>
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int my_shm_open(char *name) {
    return shm_open(name, O_RDWR);
}
*/
import "C"
import (
    "fmt"
    "unsafe"
)
const SHM_NAME = "my_shm"
const SHM_SIZE = 4 * 1000 * 1000 * 1000
type MyData struct {
    Col1 int
    Col2 int
    Col3 int
}
func main() {
    fd, err := C.my_shm_open(C.CString(SHM_NAME))
    if err != nil {
        fmt.Println(err)
        return
    }
    ptr, err := C.mmap(nil, SHM_SIZE, C.PROT_READ|C.PROT_WRITE, C.MAP_SHARED, fd, 0)
    if err != nil {
        fmt.Println(err)
        return
    }
    C.close(fd)
    data := (*MyData)(unsafe.Pointer(ptr))
    fmt.Println(data)
}

上面的程序映射了一塊4G的虛擬內存,用來證明mmap沒有實際占用4G內存,而是用到了虛擬內存。

shm_writer創建好共享內存以后,往內存區域寫入了一個結構體,shm_reader則讀出一個結構體。

內嵌的C代碼中有一行 :

復制代碼 代碼如下:
#cgo linux LDFLAGS: -lrt

因為mmap在Mac上不需要連接librt,在linux上則需要,所以做了一個條件鏈接,這是cgo提供的功能。

上面代碼中還用到一個cgo的技巧,像shm_open和mmap函數在錯誤時會返回errno,如果我們在go中使用多返回值語法,cgo會自己把錯誤碼轉換成錯誤信息,很方便的功能。

希望本文所述對大家的Go語言程序設計有所幫助。

您可能感興趣的文章:
  • Golang 內存模型詳解(一)
  • Go語言中的Array、Slice、Map和Set使用詳解
  • Go語言的GOPATH與工作目錄詳解
  • Go語言命令行操作命令詳細介紹
  • Go語言interface詳解
  • Go語言運行環境安裝詳細教程
  • Go語言實現簡單的一個靜態WEB服務器
  • GO語言并發編程之互斥鎖、讀寫鎖詳解
  • GO語言標準錯誤處理機制error用法實例
  • Go語言中的內存布局詳解

標簽:深圳 楚雄 喀什 湘潭 九江 本溪 晉城 運城

巨人網絡通訊聲明:本文標題《Go語言共享內存讀寫實例分析》,本文關鍵詞  語言,共享,內存,讀寫,實例分析,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言共享內存讀寫實例分析》相關的同類信息!
  • 本頁收集關于Go語言共享內存讀寫實例分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    免费在线看成人av| 丁香天五香天堂综合| 成人一级视频在线观看| 国产精品久99| 欧美一区二区不卡视频| 一区二区三区免费观看| 97se亚洲国产综合自在线不卡| www久久精品| 欧美一区午夜视频在线观看| 亚洲一卡二卡三卡四卡无卡久久| 欧美无乱码久久久免费午夜一区| 亚洲欧美另类久久久精品 | 美洲天堂一区二卡三卡四卡视频| 欧美体内she精视频| 午夜久久久久久久久久一区二区| 8x8x8国产精品| 精品一区二区三区日韩| 中文字幕一区二区在线播放 | 成人综合婷婷国产精品久久免费| 国产精品私人自拍| 日本sm残虐另类| 看电视剧不卡顿的网站| 日韩午夜中文字幕| 麻豆成人久久精品二区三区红| 亚洲国产精品一区二区久久恐怖片| 国产精品美女久久久久久| 91亚洲午夜精品久久久久久| 亚洲二区在线视频| 日韩一区二区在线看片| 国产美女视频一区| 亚洲成人tv网| 欧美videossexotv100| 99免费精品视频| 日韩精品91亚洲二区在线观看 | 日韩女优av电影| 国产精品 欧美精品| 亚洲女与黑人做爰| 日韩一区二区免费在线电影| 99久久er热在这里只有精品66| 亚洲va欧美va国产va天堂影院| 久久精品亚洲麻豆av一区二区| 欧美日韩国产高清一区二区 | 狠狠狠色丁香婷婷综合激情| 国产精品久久久久久久裸模| 这里只有精品99re| 韩国毛片一区二区三区| 久久久久久电影| 午夜电影一区二区三区| 欧美日韩国产精品成人| 日本v片在线高清不卡在线观看| 制服丝袜在线91| 国内成人精品2018免费看| 久久久久久久久久看片| 在线免费不卡电影| 国产精品一二一区| 亚洲人快播电影网| av不卡一区二区三区| 国产精品99久久久久| 久久激情五月激情| 日韩中文字幕亚洲一区二区va在线| 日韩制服丝袜av| 亚洲福利电影网| 亚洲综合区在线| 一区二区久久久| 亚洲一区二区三区在线播放| 亚洲女人小视频在线观看| 国产精品天天看| 亚洲手机成人高清视频| 亚洲视频免费看| 亚洲黄网站在线观看| 夜夜操天天操亚洲| 亚洲成人免费在线| 久久国产婷婷国产香蕉| 国产自产2019最新不卡| 国产精品一区二区男女羞羞无遮挡 | 五月激情综合婷婷| 午夜精品久久久久久久99樱桃| 日韩精品1区2区3区| 男人的j进女人的j一区| 狠狠色丁香久久婷婷综合丁香| 国产一区二区三区免费观看| 国产高清在线观看免费不卡| 成人免费电影视频| 日本韩国精品一区二区在线观看| 欧美日本视频在线| 91精品国模一区二区三区| 欧美电影免费观看高清完整版在线 | 精品区一区二区| 精品国产一区二区在线观看| 国产欧美综合色| 亚洲一区在线免费观看| 秋霞午夜鲁丝一区二区老狼| 国产在线视频一区二区| 成人app网站| 中文字幕一区二区三区视频| 亚洲麻豆国产自偷在线| 国产人妖乱国产精品人妖| 久久久精品国产99久久精品芒果| 国产精品免费久久| 偷窥国产亚洲免费视频| 国产精品一二三四| 精品嫩草影院久久| 亚洲在线中文字幕| 一本大道久久a久久综合婷婷| 欧洲亚洲精品在线| 亚洲男人的天堂一区二区| 亚洲 欧美综合在线网络| 激情成人午夜视频| 91欧美一区二区| 一级做a爱片久久| 久久精品国产色蜜蜜麻豆| 成人动漫一区二区三区| 欧美疯狂做受xxxx富婆| 1区2区3区欧美| 蜜桃av噜噜一区二区三区小说| 99精品视频中文字幕| 日韩区在线观看| 欧美激情一区二区三区全黄| 国产精品麻豆久久久| 久久99国产精品尤物| 洋洋av久久久久久久一区| 日本一区二区三区视频视频| 日韩视频免费观看高清完整版在线观看| 精品日产卡一卡二卡麻豆| 亚洲午夜久久久久久久久电影网| 日韩一区有码在线| 激情综合色综合久久| 一本大道久久精品懂色aⅴ| 久久综合久久久久88| 亚洲123区在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 中文字幕在线观看不卡视频| 亚洲一区二区三区四区五区黄| 国产又粗又猛又爽又黄91精品| 91精品在线观看入口| 亚洲成人av免费| 日本丶国产丶欧美色综合| 国产精品二三区| 亚洲国产一区二区视频| 91免费视频网址| 国产女人18毛片水真多成人如厕 | 欧美激情在线一区二区| 激情五月婷婷综合网| 欧美日韩免费不卡视频一区二区三区| 亚洲视频在线观看三级| 亚洲国产精品综合小说图片区| 亚洲国产高清在线观看视频| 日韩精品综合一本久道在线视频| 不卡免费追剧大全电视剧网站| 日韩成人一区二区三区在线观看| 亚洲精品午夜久久久| 精品国产髙清在线看国产毛片| 色噜噜狠狠一区二区三区果冻| 国产专区欧美精品| 国产高清久久久| 欧美一区二区免费视频| 日韩综合在线视频| 91精品国产乱码| 国产在线精品不卡| 国产精品免费av| 国产日韩亚洲欧美综合| 国产精品自拍av| 亚洲欧美在线观看| 精品视频在线免费| 日韩主播视频在线| 久久一区二区三区四区| av在线综合网| 欧美精品在线一区二区| 94-欧美-setu| 日韩综合小视频| 91精彩视频在线观看| 99久久亚洲一区二区三区青草| 色综合久久99| 26uuu国产在线精品一区二区| 亚洲免费毛片网站| 免费久久99精品国产| 国产传媒日韩欧美成人| 色偷偷久久一区二区三区| 2023国产精品| 激情综合亚洲精品| 欧美性三三影院| 有码一区二区三区| 91亚洲精品久久久蜜桃| 日韩精品专区在线影院观看| 一区二区三区四区不卡视频| 久久er精品视频| 欧美一区二区三区精品| 青青草国产精品97视觉盛宴| 99热这里都是精品| 一区二区三区电影在线播| av在线一区二区三区| 欧美日韩国产另类不卡| www.欧美日韩| 日韩女优av电影在线观看| 久久国产精品色| 久久久久久亚洲综合影院红桃| 久久精品免视看| 天天操天天干天天综合网| 青青草91视频| 久久久美女毛片|