



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Go通道channel通過通信共享內存目錄引言通道的聲明與創(chuàng)建接收發(fā)送數(shù)據
引言
不要通過共享內存來通信應該通過通信來共享內存
這句話有網友的解釋如下:
這句俏皮話具體說來就是,不同的線程不共享內存不用鎖,線程之間通訊用通道(channel)同步也用channel。
chanel是協(xié)程之間傳遞信息的媒介,優(yōu)雅地解決了某些后端開發(fā)常用語言中隨處可見的lock,unlock,臨界區(qū)等,把從很多線程層面解決的問題移到協(xié)程,從而靜態(tài)地保證沒有數(shù)據競爭。
通道的聲明與創(chuàng)建
偽代碼如下:
//聲明類型
var通道名chan數(shù)據類型
//創(chuàng)建通道
通道名=make(chan數(shù)據類型)
實際例子如下:
packagemain
import"fmt"
funcmain(){
varachanint
fmt.Printf("%T,%v\n",a,a)
ifa==nil{
a=make(chanint)
fmt.Printf("%T,%v\n",a,a)
}
運行結果是:
chanint,nil
chanint,0x1400001a360
通道是一個內存地址,這也說明了其實一個引用類型的數(shù)據。
接收發(fā)送數(shù)據
對于同一個通道來講,他的讀數(shù)據和寫數(shù)據都是阻塞的。
偽代碼如下:
//從通道讀數(shù)據
data:=-a
//把數(shù)據寫入通道
a-data
實際例子如下:
packagemain
import"fmt"
funcmain(){
//首先創(chuàng)建一個bool類型的通道
varch1chanbool
ch1=make(chanbool)
//下面啟動一個goroutine
gofunc(){
fori:=0;i10;i++{
fmt.Println("子goroutine中,i:",i)
fmt.Println("completed")
//循環(huán)結束后向團隊中寫數(shù)據,表示要結束了
ch1-true
//在主程序中讀取數(shù)據
data:=-ch1
//打印一下我們讀到的數(shù)據
fmt.Println("maindata:",data)
fmt.Println("maingoroutinecompleted")
}
運行結果如下:
子goroutine中,i:0
子goroutine中,i:1
子goroutine中,i:2
子goroutine中,i:3
子goroutine中,i:4
子goroutine中,i:5
子goroutine中,i:6
子goroutine中,i:7
子goroutine中,i:8
子goroutine中,i:9
completed
maindata:true
maingoroutinecompleted
我們的子goroutine里面循環(huán)打印1~10,打印完成之后把chanel類型的ch1寫為true,
這時候,主goroutine就可以根據這一條件進行下一步了,,在此之前,其實就算主goroutine先搶到了資源,從ch1中讀取數(shù)據,但是現(xiàn)在通道里面啥都沒有,只能阻塞,然后乖乖交出資源給我們的子goroutine,直到循環(huán)結束寫true入ch1。
需要注意的有以下幾點:
chanel是需要指定類型的nil類型的chanel不能直接使用。chanel本身是同步的,同一時間只能有一條goroutine進行操作。chanel是goroutine之間傳遞數(shù)據用的,chanel數(shù)據的發(fā)送和接收必須在不同的goroutine中,如果只有一條goroutine是用不上chanel的,這種情況會發(fā)生死鎖(deadLock)。從chanel里面讀數(shù)據立馬就會被阻塞,直到有向chanel寫數(shù)據的goroutine來。向chanel里面寫數(shù)據立馬就會被阻塞,直到有從chanel讀數(shù)據的goroutine來。
(以上都是相對于沒有緩存的通道而
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保尊寶合同范例
- 住房返租合同范例
- 醫(yī)療AI的倫理邊界深入探討其發(fā)展及道德考量
- 《長方體和正方體的認識》的教學設計新
- 建筑工程師專業(yè)技術工作總結模版
- 醫(yī)療人才隊伍建設的挑戰(zhàn)與對策
- 個人傭金協(xié)議合同范例
- 代理小區(qū)廣告合同范例
- 醫(yī)療健康數(shù)據科學的未來趨勢與挑戰(zhàn)
- 小兒完全性肺靜脈異位引流的臨床護理
- 長安悅翔驅動橋設計與有限元分析
- JTG C10-2007 公路勘測規(guī)范
- 銀行卡租用協(xié)議合集3篇
- 合歡花提取物的鎮(zhèn)靜和催眠作用
- (高清版)DZT 0216-2020 煤層氣儲量估算規(guī)范
- 《養(yǎng)老護理員》-課件:職業(yè)安全和個人防護知識
- 蘇爾壽泵HSB中文手冊樣本
- 最高人民法院民法典總則編司法解釋理解與適用
- 雅思托福培訓班合作協(xié)議
- 青少年健康體重管理調查報告
- uht牛奶工藝流程
評論
0/150
提交評論