Go的CSP并發(fā)模型

成都創(chuàng)新互聯(lián)成都企業(yè)網(wǎng)站建設服務,提供成都網(wǎng)站設計、成都做網(wǎng)站網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設計,成都響應式網(wǎng)站建設公司,網(wǎng)頁設計師打造企業(yè)風格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務。歡迎咨詢做網(wǎng)站需要多少錢:18982081108
Go實現(xiàn)了兩種并發(fā)形式。第一種是大家普遍認知的:多線程共享內(nèi)存。其實就是Java或者C++等語言中的多線程開發(fā)。另外一種是Go語言特有的,也是Go語言推薦的:CSP(communicating sequential processes)并發(fā)模型。
CSP 是 Communicating Sequential Process 的簡稱,中文可以叫做通信順序進程,是一種并發(fā)編程模型,由 Tony Hoare 于 1977 年提出。簡單來說,CSP 模型由并發(fā)執(zhí)行的實體(線程或者進程)所組成,實體之間通過發(fā)送消息進行通信,這里發(fā)送消息時使用的就是通道,或者叫 channel。CSP 模型的關(guān)鍵是關(guān)注 channel,而不關(guān)注發(fā)送消息的實體。 Go 語言實現(xiàn)了 CSP 部分理論 。
“ 不要以共享內(nèi)存的方式來通信,相反, 要通過通信來共享內(nèi)存。”
Go的CSP并發(fā)模型,是通過 goroutine和channel 來實現(xiàn)的。
goroutine 是Go語言中并發(fā)的執(zhí)行單位。其實就是協(xié)程。
channel是Go語言中各個并發(fā)結(jié)構(gòu)體(goroutine)之前的通信機制。 通俗的講,就是各個goroutine之間通信的”管道“,有點類似于Linux中的管道。
Channel
Goroutine
goroutine和channel是Go語言非常棒的特色,它們提供了一種非常輕便易用的并發(fā)能力。但是當您的應用進程中有很多goroutine的時候,如何在主流程中等待所有的goroutine 退出呢?
1 通過Channel傳遞退出信號
Go的一大設計哲學就是:通過Channel共享數(shù)據(jù),而不是通過共享內(nèi)存共享數(shù)據(jù)。主流程可以通過channel向任何goroutine發(fā)送停止信號,就像下面這樣:
func run(done chan int) {
for {
select {
case -done:
fmt.Println("exiting...")
done - 1
break
default:
}
time.Sleep(time.Second * 1)
fmt.Println("do something")
}
}
隨便怎么寫啊,共享內(nèi)存獲取到不是給你一個內(nèi)存地址,這里稱之為des么,直接通過des地址訪問啊,比如你要寫2個結(jié)構(gòu)體進去,第一個memcpy寫到des,第二個可以(memcpy到des+結(jié)構(gòu)體大小)的地址指向的內(nèi)存上,
網(wǎng)站欄目:go語言共享內(nèi)存 go 內(nèi)存拷貝
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article28/doddgjp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、服務器托管、微信小程序、微信公眾號、小程序開發(fā)、云服務器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)