日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFramegproc-進(jìn)程通信

目前?gproc?組件提供的進(jìn)程通信特性屬于實(shí)驗(yàn)性特性!

創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、洛龍網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開(kāi)發(fā)、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為洛龍等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

不要通過(guò)共享內(nèi)存來(lái)通信,而應(yīng)該通過(guò)通信來(lái)共享內(nèi)存。

常見(jiàn)的進(jìn)程通信方式有5種:管道/信號(hào)量/共享內(nèi)存/共享文件/?Socket?。按照常見(jiàn)的并發(fā)架構(gòu)的設(shè)計(jì)來(lái)講,我們盡可能地少用鎖機(jī)制,包括共享內(nèi)存/共享文件其實(shí)都是需要依靠鎖機(jī)制才能保證數(shù)據(jù)流的正確性,因?yàn)殒i機(jī)制帶來(lái)的維護(hù)復(fù)雜度往往會(huì)比其帶來(lái)的好處更多。信號(hào)量常用在?*nix?系統(tǒng)中,跨平臺(tái)性比較差。管道雖然實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,但是在穩(wěn)定性上并沒(méi)有?Socket?機(jī)制好。因此,?gproc?實(shí)現(xiàn)的進(jìn)程通信采用的是?Socket?機(jī)制。但是需要注意的是,通信的兩個(gè)進(jìn)程都需要使用?gproc?模塊來(lái)實(shí)現(xiàn)發(fā)送&接收數(shù)據(jù)。

?gproc?的進(jìn)程通信API非常簡(jiǎn)便,只需通過(guò)以下兩個(gè)方法實(shí)現(xiàn):

func Send(pid int, data []byte) error
func Receive() *Msg

我們通過(guò)?Send?方法向指定的進(jìn)程發(fā)送數(shù)據(jù)(每調(diào)用一次相當(dāng)于發(fā)送一條消息),在指定的進(jìn)程中可以通過(guò)?Receive?方法獲得數(shù)據(jù)。其中,?Receive?方法提供了類似消息隊(duì)列的形式來(lái)收取其他進(jìn)程傳遞的數(shù)據(jù),當(dāng)隊(duì)列為空時(shí),該方法將會(huì)阻塞等待。

我們來(lái)看一個(gè)進(jìn)程間通信的基本使用示例:

package main

import (
	"fmt"
	"github.com/GOgf/gf/v2/os/gproc"
	"github.com/gogf/gf/v2/os/gtime"
	"github.com/gogf/gf/v2/os/gtimer"
	"os"
	"time"
)

func main() {
	fmt.Printf("%d: I am child? %v\n", gproc.Pid(), gproc.IsChild())
	if gproc.IsChild() {
		gtimer.SetInterval(time.Second, func() {
			gproc.Send(gproc.PPid(), []byte(gtime.Datetime()))
		})
		select {}
	} else {
		m := gproc.NewManager()
		p := m.NewProcess(os.Args[0], os.Args, os.Environ())
		p.Start()
		for {
			msg := gproc.Receive()
			fmt.Printf("receive from %d, data: %s\n", msg.SendPid, string(msg.Data))
		}
	}
}

該示例中,我們的主進(jìn)程啟動(dòng)時(shí)創(chuàng)建了一個(gè)子進(jìn)程,該子進(jìn)程每隔1秒鐘向主進(jìn)程發(fā)送當(dāng)前的時(shí)間,主進(jìn)程收取到子進(jìn)程發(fā)送的參數(shù)后輸出到終端上。執(zhí)行后,終端輸出的內(nèi)容如下:

29978: I am child? false
29984: I am child? true
receive from 29984, data: 2018-05-18 15:01:00
receive from 29984, data: 2018-05-18 15:01:01
receive from 29984, data: 2018-05-18 15:01:02
receive from 29984, data: 2018-05-18 15:01:03
receive from 29984, data: 2018-05-18 15:01:04
...


當(dāng)前文章:創(chuàng)新互聯(lián)GoFrame教程:GoFramegproc-進(jìn)程通信
鏈接分享:http://www.dlmjj.cn/article/dpiggsj.html