亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

Go語言共享內(nèi)存讀寫實(shí)例分析

2020-04-01 19:19:04
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Go語言共享內(nèi)存讀寫方法,實(shí)例分析了共享內(nèi)存的原理與讀寫技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
 

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

前面分析了Go語言指針運(yùn)算和內(nèi)嵌C代碼的方法,做了一個(gè)Go語言共享內(nèi)存讀寫的實(shí)驗(yàn)。

先大概說下什么是共享內(nèi)存。我們知道不同進(jìn)程見的內(nèi)存是互相獨(dú)立的,沒辦法直接互相操作對方內(nèi)的數(shù)據(jù),而共享內(nèi)存則是靠操作系統(tǒng)提供的內(nèi)存映射機(jī)制,讓不同進(jìn)程的一塊地址空間映射到同一個(gè)虛擬內(nèi)存區(qū)域上,使不同的進(jìn)程可以操作到一塊共用的內(nèi)存塊。共享內(nèi)存是效率最高的進(jìn)程間通訊機(jī)制,因?yàn)閿?shù)據(jù)不需要在內(nèi)核和程序之間復(fù)制。

共享內(nèi)存用到的是系統(tǒng)提供的mmap函數(shù),它可以將一個(gè)文件映射到虛擬內(nèi)存的一個(gè)區(qū)域中,程序使用指針引用這個(gè)區(qū)域,對這個(gè)內(nèi)存區(qū)域的操作會(huì)被回寫到文件上,Go內(nèi)置的syscall包中有mmap函數(shù),但是它是經(jīng)過封裝的,返回的是[]byte,沒辦法做我需求的指針運(yùn)算,所以我還是用cgo來調(diào)用原生的mmap。

實(shí)驗(yàn)分為讀和寫兩個(gè)程序,這樣我們可以觀察到讀進(jìn)程可以讀到寫進(jìn)程寫入共享內(nèi)存的信息。

下面是shm_writer.go的代碼:

復(fù)制代碼代碼如下:
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的代碼:

復(fù)制代碼代碼如下:
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的虛擬內(nèi)存,用來證明mmap沒有實(shí)際占用4G內(nèi)存,而是用到了虛擬內(nèi)存。

shm_writer創(chuàng)建好共享內(nèi)存以后,往內(nèi)存區(qū)域?qū)懭肓艘粋€(gè)結(jié)構(gòu)體,shm_reader則讀出一個(gè)結(jié)構(gòu)體。

內(nèi)嵌的C代碼中有一行 :

復(fù)制代碼代碼如下:
#cgo linux LDFLAGS: -lrt

因?yàn)閙map在Mac上不需要連接librt,在linux上則需要,所以做了一個(gè)條件鏈接,這是cgo提供的功能。

 

上面代碼中還用到一個(gè)cgo的技巧,像shm_open和mmap函數(shù)在錯(cuò)誤時(shí)會(huì)返回errno,如果我們在go中使用多返回值語法,cgo會(huì)自己把錯(cuò)誤碼轉(zhuǎn)換成錯(cuò)誤信息,很方便的功能。

希望本文所述對大家的Go語言程序設(shè)計(jì)有所幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
天天爱天天做色综合| 91在线观看污| 国产 欧美 自拍| 国产精品69xx| 美日韩精品免费视频| 国产午夜精品一区二区理论影院| 国产日韩三级| 视频一区国产| 美女网站色免费| 欧美激情亚洲另类| japanese色国产在线看视频| 国内精品久久久久久久果冻传媒| 狠狠色丁香婷婷综合影院| 国产精品一区二区3区| 亚洲高清中文字幕| 奇米四色7777| 国产色产综合色产在线视频| 欧美另类一区二区三区| 亚洲视频在线观看免费视频| 97婷婷大伊香蕉精品视频| 亚洲av熟女国产一区二区性色| 久久波多野结衣| 久久这里只有精品视频首页| 污污的网站在线观看| 女教师淫辱の教室蜜臀av软件| 国内国产精品天干天干| 亚洲欧洲综合网| 日本精品一二三区| 92国产精品视频| rebdb初裸写真在线观看| 僵尸再翻生在线观看免费国语| 日韩精品电影一区二区三区| 午夜性色一区二区三区免费视频| 国产日韩欧美91| 日韩精品中文字幕在线| 亚洲精品按摩视频| 一女二男3p波多野结衣| 久久久久久久久综合| 欧美日韩视频免费播放| 国产精品入口麻豆电影| 欧美色黄视频| 99精品视频免费在线观看| 国产精品成人在线| 日韩专区中文字幕| 黄色片在线观看网站| 男人和女人啪啪网站| 色婷婷综合久久久中文一区二区| 丰满人妻一区二区三区四区53| 精品一二三区| 黄色免费直接看| 高清视频国产| 日本免费一级视频| 五月激情丁香一区二区三区| 日韩精品在线视频| 国产激情在线看| 一女三黑人理论片在线| 亚洲无吗一区二区三区| 97成人精品视频在线观看| 国产九九九九九| 女主播福利一区| 久久久久久www| 久久精品视频一区二区三区| 日本中文字幕不卡| 日本精品在线免费观看| 久久青草久久| 全国精品免费看| 午夜在线不卡| 日本18中文字幕| 欧美日韩在线第一页| 国产亚洲精品久久久网站好莱| 精品在线视频一区二区三区| 欧美日韩一二| 男人在线视频资源| 北条麻妃av高潮尖叫在线观看| 午夜写真片福利电影网| 日韩欧美一区二区三区在线| 中文字幕免费在线观看视频一区| 国产一区二区日韩精品欧美精品| 欧洲有码在线视频| 国产九九九九九| 欧美 国产 日本| 少妇av一区二区| 999在线观看免费大全电视剧| 搡女人真爽免费午夜网站| 丝袜制服影音先锋| 欧美日韩一区精品| 久久视频免费在线| 中文字幕亚洲欧美日韩在线不卡| 欧美成人性战久久| 欧美性猛交 xxxx| 精品区一区二区| 老司机午夜福利视频| 男生操女生视频网站| 久久亚裔精品欧美| 国产中文字幕久久| 欧美成人精品在线视频| 中文字幕在线不卡一区| 亚洲三级精品| 亚洲 另类 春色 国产| 亚洲一区二区免费| 日本爱爱免费视频| 在线一区二区三区四区五区| 婷婷亚洲婷婷综合色香五月| 欧美激情一区二区三区免费观看| **精品中文字幕一区二区三区| 久久精品国产屋| 欧美一二三四五区| 国产亚洲第一伦理第一区| 91丝袜一区二区三区| 亚洲最大成人综合网| 日韩麻豆第一页| 日本一区二区三区四区| 国产成人精品一区二区三区免费| 精品久久九九| 黄在线观看在线播放720p| 人操人爱免费视频| 污视频网站在线免费观看| 欧美精品在线观看一区二区| 性色视频在线| 四虎成人在线观看| 久章草在线视频| 亚洲 欧美 日韩 国产综合 在线| 中文字幕人成不卡一区| 亚洲影视一区二区| 国产亚洲成人精品| 欧美老肥婆性猛交视频| 国产超碰在线一区| 欧美日本国产在线| 好看的av在线不卡观看| 精品国产乱码久久久久久浪潮| 九一国产精品| www夜片内射视频日韩精品成人| 国产精品.com| 成人3d动漫一区二区三区| 懂色av蜜臀av粉嫩av分享吧最新章节| 国产精品17p| 日韩专区欧美专区| 偷偷色噜狠狠狠狠的777米奇| av影院午夜一区| 毛片av在线| 日韩三级在线观看| www.91在线播放| 91国内精品白嫩初高生| 日本欧美黄网站| 日韩av中文在线观看| 国产寡妇色xxⅹ交肉视频| 激情综合网站| 欧美三级午夜理伦三级中视频| 99热这里只有精品在线观看| 色婷婷在线影院| xxxxx性13一14| 久久69国产一区二区蜜臀| 影音先锋中文字幕一区| 亚洲一级视频在线观看| 日韩欧美精品一区| 视频在线观看国产精品| 欧美色欧美亚洲另类二区精品| 国产欧美日韩综合精品一区二区三区| 久操网在线观看| 国产精品视频一区二区高潮| 影音先锋中文一区| 免费看黄色av| 成人在线视频你懂的| 国产美女玉足交| 亚洲伊人网在线观看| 日韩乱码人妻无码中文字幕久久| 波多一区二区| 亚洲免费av一区二区| 色偷偷av一区二区三区| 97在线公开视频| 亚洲夂夂婷婷色拍ww47| 亚洲影视综合| 欧美国产大片| а√在线中文网新版地址在线| 国产乱妇乱子在线播视频播放网站| 国产福利一区视频| 欧美影院一区| 中文字幕一区二区在线播放| 色婷婷一区二区三区| 国产一区二区三区色淫影院| 欧美精品久久久久久久多人混战| 国产精品久久影院| 亚洲日韩中文字幕在线播放| 国产精品久久久久久免费| 国产在线视频欧美一区二区三区| 高清欧美性猛交xxxx黑人猛交| 国产专区一区二区三区| 伦理av在线| 黄色电影在线免费观看| 欧美军同video69视频| 国产精品一区二区电影| 亚洲巨乳在线观看| 亚洲精品免费在线| 久草在线新资源| 亚洲AV无码久久精品国产一区| 国产视频亚洲| 欧美在线免费视屏| 好吊操视频这里只有精品| 国产免费大片| 免费观看毛片网站| 成人在线视频免费看| 波多野结衣视频网站| 91小视频免费观看| 欧美熟妇激情一区二区三区| 久久久精品一区二区三区| 中文久久乱码一区二区| 欧美精品一区男女天堂| 中文字幕高清在线| 伊人久久大香线蕉综合75| 亚洲女人天堂色在线7777| 亚洲精品videosex极品| 国产情侣av在线| 亚洲激情av| 亚洲欧美激情四射在线日| 亚洲无码久久久久久久| 日韩成人在线观看视频| 日韩不卡在线| caoporn-草棚在线视频最| 欧美日本在线播放| 国产精品盗摄久久久| 亚洲美女视频网站| 午夜在线免费视频| 欧美日韩精品一区二区天天拍小说| 麻豆一区二区三| 成人一区二区电影| 岛国在线免费| av激情亚洲男人天堂| 精品va天堂亚洲国产| 久久久夜夜夜| 高清国语自产拍免费一区二区三区| 天天色棕合合合合合合合| 男操女视频网站| 久久国内精品一国内精品| 91免费国产视频网站| 91麻豆精品国产综合久久久| 国产成人三级在线观看视频| 国产黄色片中文字幕| 欧美午夜理伦三级在线观看| 欧美在线国产| 中国一级大黄大黄大色毛片| 久久亚洲综合网| 熟妇女人妻丰满少妇中文字幕| 最新av在线免费观看| 亚洲午夜精品福利| 欧产日产国产精品视频| 国产精品99久久久久久久久久久久| 国产成人福利| se69色成人网wwwsex| 九九视频这里只有精品| 你懂的视频欧美| 岛国视频一区| 欧美成人做性视频在线播放| 日韩精品一区二区三区国语自制| heyzo在线| 国产一区二区精品丝袜| 日韩爱爱小视频| 成人激情免费在线| 亚洲精品久久久久久久久久久久久| 天堂蜜桃一区二区三区| 免费在线黄网站| 亚洲女厕所小便bbb| 亚洲日本va在线观看| 欧美又大粗又爽又黄大片视频| 7m精品国产导航在线| 国产1区在线观看| 日韩欧美999| 四虎影视最新网址| 欧美日韩国产一中文字不卡| 综合久久五月天| 日本大片在线看黄a∨免费| 亚洲视频在线观看一区| 亚洲香蕉成视频在线观看| 色一情一区二区| 蜜臀久久99精品久久久画质超高清| 日韩av高清| 亚洲图片制服诱惑| 欧美视频第三页| 污视频在线免费观看| 国产精品丝袜xxxxxxx| 在线色欧美三级视频| 日本久久精品一区二区| julia中文字幕一区二区99在线| 欧美丝袜第三区| 一级黄色录像大片| 先锋音影av资源中文网| 国产一区二区在线影院| 欧美成人精品欧美一级乱黄| 日韩欧美一区二区视频在线播放| 91九色蝌蚪嫩草| 免费网站看黄yyy222| 亚洲理论在线观看| www.蜜臀av.com| 日日摸日日碰夜夜爽av| 熟妇高潮一区二区高潮| 精品国产亚洲一区二区三区| 欧美精品一区二区三区三州| 97视频免费在线| 午夜精品福利一区二区| 色av综合在线| 国产丝袜一区二区三区| 亚洲国产天堂久久国产91| 亚洲无限乱码一二三四麻| 午夜精品久久久久久毛片| 国内国产区免费视频| 最新四虎影在线在永久观看www| 你懂得视频在线观看| 亚洲性69xxxbbb| 色妞色视频一区二区三区四区| 久久久久高潮毛片免费全部播放| 婷婷视频一区二区三区| 日韩av在线影院| 你懂的视频在线一区二区| 欧美日韩在线精品一区二区三区| 欧美精品99久久久| 欧美特黄aaa| 精品欧美色视频网站在线观看| 欧美激情一区二区三区四区| 一级黄色免费| 免费一级电影| 一区在线不卡| 成人免费黄色av| 精品国产区一区二区三区在线观看| 欧美性理论片在线观看片免费| 国产精品国产一区二区三区四区| 国产亚洲视频在线观看| 污版网站在线观看| 91麻豆国产香蕉久久精品| 精精国产xxxx视频在线中文版|