国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

聊聊協程和管道—管道

來源: 責編: 時間:2023-08-09 23:03:10 427觀看
導讀管道簡介【1】管道(channel)特質介紹:(1)管道本質就是一個數據結構-隊列(2)數據是先進先出(3)自身線程安全,多協程訪問時,不需要加鎖,channel本身就是線程安全的(4)管道有類型的,一個string的管道只能存放string類型數據管道入門案例

管道簡介

【1】管道(channel)特質介紹:

(1)管道本質就是一個數據結構-隊列GgR28資訊網——每日最新資訊28at.com

(2)數據是先進先出GgR28資訊網——每日最新資訊28at.com

(3)自身線程安全,多協程訪問時,不需要加鎖,channel本身就是線程安全的GgR28資訊網——每日最新資訊28at.com

(4)管道有類型的,一個string的管道只能存放string類型數據GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

管道入門案例

【1】管道的定義:

var 變量名 chan 數據類型GgR28資訊網——每日最新資訊28at.com

PS1:chan管道關鍵字GgR28資訊網——每日最新資訊28at.com

PS2:數據類型指的是管道的類型,里面放入數據的類型,管道是有類型的,int類型的管道只能寫入整數intGgR28資訊網——每日最新資訊28at.com

PS3:管道是引用類型,必須初始化才能寫入數據,即make后才能使用GgR28資訊網——每日最新資訊28at.com

【2】案例:

func main()  {	//定義管道 、 聲明管道 ---> 定義一個int類型的管道	var intChan chan int	//通過make初始化:管道可以存放3個int類型的數據	intChan = make(chan int, 3)	//證明管道是引用類型:	fmt.Printf("intChan的值: %v /n",intChan)	//向管道存放數據:	intChan <- -10	num := 20	intChan <- num	intChan <- 40	//注意:不能存放大于容量的數據:	// intChan <- -80	//輸出管道的長度:	fmt.Printf("管道的實際長度:%v,管道的容量是:%v /n",len(intChan),cap(intChan))	//在管道中讀取數據:	num1 := <-intChan	num2 := <-intChan	num3 := <-intChan	fmt.Println(num1)	fmt.Println(num2)	fmt.Println(num3)	//注意:在沒有使用協程的情況下,如果管道的數據已經全部取出,那么再取就會報錯:	// num4 := <-intChan	// fmt.Println(num4)	fmt.Printf("管道的實際長度:%v,管道的容量是:%v /n",len(intChan),cap(intChan))}

管道的關閉

【1】管道的關閉:

使用內置函數close可以關閉管道,當管道關閉后,就不能再向管道寫數據了,但是仍然可以從該管道讀取數據。GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

【2】案例:

func main()  {	var intChan chan int	intChan = make(chan int, 3)	intChan <- 10	intChan <- 20	//關閉管道:	close(intChan)	//再次寫入數據:--->報錯	// intChan <- 30	//當管道關閉后,讀取數據是可以的:	num := <- intChan	fmt.Println(num)}

管道的遍歷

【1】管道的遍歷:

管道支持for-range的方式進行遍歷,請注意兩個細節GgR28資訊網——每日最新資訊28at.com

1)在遍歷時,如果管道沒有關閉,則會出現deadlock的錯誤GgR28資訊網——每日最新資訊28at.com

2)在遍歷時,如果管道已經關閉,則會正常遍歷數據,遍歷完后,就會退出遍歷。GgR28資訊網——每日最新資訊28at.com

【2】案例:

func main()  {	var intChan chan int	intChan = make(chan int, 100)	for i := 0; i < 100; i++ {		intChan <- i	}	//在遍歷前,如果沒有關閉管道,就會出現deadlock的錯誤	//所以我們在遍歷前要進行管道的關閉	// for v := range intChan {	// 	fmt.Println("value = ",v)	// }	close(intChan)	//遍歷:for-range	for v := range intChan {		fmt.Println("value = ",v)	}}

協程和管道協同工作案例

【1】案例需求:

請完成協程和管道協同工作的案例,具體要求:GgR28資訊網——每日最新資訊28at.com

1) 開啟一個writeData協程,向管道中寫入50個整數.GgR28資訊網——每日最新資訊28at.com

2) 開啟一個readData協程,從管道中讀取writeData寫入的數據。GgR28資訊網——每日最新資訊28at.com

3) 注意: writeData和readDate操作的是同一個管道GgR28資訊網——每日最新資訊28at.com

4) 主線程需要等待writeData和readDate協程都完成工作才能退出GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

【2】原理圖:

GgR28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"time"	"sync")var wg sync.WaitGroup//寫:func writeData(intChan chan int)  {	defer wg.Done()	for i := 1; i <= 50; i++ {		intChan <- i		fmt.Println("寫入的數據為:",i)		time.Sleep(time.Second)	}		close(intChan)}//讀:func readData(intChan chan int) {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數據為:",v)		time.Sleep(time.Second)	}}func main()  {	//主線程	//寫協程和讀協程共同操作同一個管道-》定義管道:	intChan := make(chan int, 50)	wg.Add(2)	//開啟讀和寫的協程:	go writeData(intChan)	go readData(intChan)	//主線程一直在阻塞,什么時候wg減為0了,就停止	wg.Wait()	fmt.Println("讀寫數據完成...")}

運行結果:GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

聲明只讀只寫管道

【1】管道可以聲明為只讀或者只寫性質

【2】代碼:

package mainimport (	"fmt")func main()  {	//默認情況下,管道是雙向的--》可讀可寫:	//聲明為只寫:	// 管道具備<- 只寫性質	var intChan chan<- int	intChan = make(chan int, 3)	intChan <- 10	// 報錯	// num := <- intChan	fmt.Println("intChan:",intChan)	//聲明為只讀:	// 管道具備<- 只讀性質 	var intChan2 <-chan int	if intChan2 != nil {		num1 := <- intChan2		fmt.Println("num1:",num1)	}	// 報錯	// intChan2 <- 30}

管道的阻塞

【1】當管道只寫入數據,沒有讀取,就會出現阻塞:

package mainimport (	"fmt"	"sync")var wg sync.WaitGroupfunc writeData(intChan chan int)  {	defer wg.Done()	for i := 1; i < 10; i++ {		intChan <- i		fmt.Println("寫入的數據:",i)	}	close(intChan)}func readData(intChan chan int)  {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數據為:",v)	}}func main()  {	intChan := make(chan int, 10)	wg.Add(2)	go writeData(intChan)	// go readData(intChan)	wg.Wait()}

運行結果GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

【2】寫的快,讀的慢(管道讀寫頻率不一致),不會出現阻塞問題:

package mainimport (	"fmt"	"sync"	"time")var wg sync.WaitGroupfunc writeData(intChan chan int)  {	defer wg.Done()	for i := 1; i < 10; i++ {		intChan <- i		fmt.Println("寫入的數據:",i)	}	close(intChan)}func readData(intChan chan int)  {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數據為:",v)		time.Sleep(time.Second)	}}func main()  {	intChan := make(chan int, 10)	wg.Add(2)	go writeData(intChan)	go readData(intChan)	wg.Wait()}

select功能

【1】select功能:解決多個管道的選擇問題,也可以叫做多路復用,可以從多個管道中隨機公平地選擇一個來執行

PS:case后面必須進行的是io操作,不能是等值,隨機去選擇一個io操作GgR28資訊網——每日最新資訊28at.com

PS:default防止select被阻塞住,加入defaultGgR28資訊網——每日最新資訊28at.com

【2】代碼:

package mainimport (	"fmt"	"time")func main()  {	intChan := make(chan int, 1)	go func ()  {		time.Sleep(time.Second * 15)		intChan <- 15	}()	stringChan := make(chan string, 1)	go func ()  {		time.Sleep(time.Second * 12)		stringChan <- "hellocyz"	}()	//本身取數據就是阻塞的	// fmt.Println(<-intChan)	select {		case v := <-intChan : fmt.Println("intChan:",v)		case v := <-stringChan : fmt.Println("stringChan:",v)		default: fmt.Println("防止select被阻塞")	}}

defer+recover機制處理錯誤

【1】問題原因:多個協程工作,其中一個協程出現panic,導致程序崩潰

【2】解決辦法:利用defer+recover捕獲panic進行處理,即使協程出現問題,主線程仍然不受影響可以繼續執行。

【3】案例:

package mainimport (	"fmt"	"time")//輸出數字:func printNum()  {	for i := 1; i <= 10; i++ {		fmt.Println(i)		}}//做除法操作:func divide()  {	defer func ()  {		err := recover()		if err != nil {			fmt.Println("devide()出現錯誤:",err)		}	}()	num1 := 10	num2 := 0	result := num1 / num2	fmt.Println(result)}func main()  {	//啟動兩個協程:	go printNum()	go divide()	time.Sleep(time.Second * 5)}

結果:GgR28資訊網——每日最新資訊28at.com

GgR28資訊網——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-5170-0.html聊聊協程和管道—管道

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用Kafka構建事件驅動的架構?

下一篇: 空間智能化為產業轉型帶來新動能,華為開放能力與合作伙伴共贏時代

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 榮耀Magic4 至臻版 首創智慧隱私通話 強勁影音系統

    2022年第一季度臨近尾聲,在該季度內,許多品牌陸續發布自己的最新產品,讓大家從全新的角度來了解當今的手機技術。手機是電子設備中,更新迭代十分迅速的一款產品,基
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
99久免费精品视频在线观看| 亚洲毛片在线| 久久精品国产99久久6| 亚洲一区成人在线| 亚洲精品国久久99热| 亚洲免费av高清| 亚洲国产综合视频在线观看| 亚洲精品老司机| 亚洲福利视频一区二区| 午夜精品福利一区二区三区蜜桃| 亚洲成人福利片| 日韩国产精品91| 国产一区二区三区四区五区美女 | 夜夜亚洲天天久久| 亚洲综合无码一区二区| 亚洲综合免费观看高清在线观看| 亚洲国产视频在线| 免费在线视频一区| 国产在线精品一区二区夜色| 风间由美一区二区av101| 成人综合在线观看| 牛人盗摄一区二区三区视频| 伊人久久大香线蕉综合热线| 亚洲专区一区二区三区| 在线欧美日韩精品| 日韩欧美另类在线| 中文字幕第一页久久| 亚洲综合视频网| 久久99久久精品| av在线播放一区二区三区| 雨宫琴音一区二区在线| 91久久精品一区二区三区| 欧美videos大乳护士334| 国产精品久久国产精麻豆99网站| 亚洲成av人片在线观看无码| 国产超碰在线一区| 韩日精品在线| 欧美综合一区二区三区| 久久青草欧美一区二区三区| 一区二区三区精品在线观看| 韩国精品在线观看| 国产在线日韩| 欧美日韩一区二区三区高清| 国产欧美综合在线观看第十页| 亚洲午夜精品久久久久久久久| 久久机这里只有精品| 欧美日韩亚洲一区三区| 欧美性极品少妇| 中文字幕精品综合| 蜜桃av一区二区在线观看| 欧美精品二区| 欧美三级中文字幕| 亚洲图片你懂的| 国产成人精品一区二| 亚洲一区国产一区| 久久久久久久久99精品| 蜜桃一区二区三区四区| 亚洲午夜一级| 欧美v亚洲v综合ⅴ国产v| 亚洲成av人片一区二区梦乃| 91影院在线免费观看| 91黄色激情网站| 日韩美女视频一区| 成人午夜精品在线| 久久国产手机看片| 蜜桃精品视频在线观看| 欧美特黄一区| 欧美一区二区在线观看| 日韩国产精品久久久久久亚洲| 欧美三日本三级少妇三99| 日韩一区二区三区电影在线观看| 亚洲国产日韩a在线播放| 暖暖成人免费视频| 欧美精品丝袜久久久中文字幕| 亚洲自拍欧美精品| 欧美日韩国产综合视频在线| 日韩视频一区二区三区在线播放| 午夜精彩视频在线观看不卡| 伊人激情综合| 国产女同互慰高潮91漫画| 国产成人免费视频网站| 色吊一区二区三区| 亚洲福利视频一区| 国产欧美日韩亚洲| 亚洲视频小说图片| 欧美日韩理论| 久久精品亚洲乱码伦伦中文 | 色婷婷综合久久久中文字幕| 亚洲激情综合网| 黄色日韩在线| 国产精品久久免费看| 99久久久久免费精品国产| 欧美一区二区在线免费观看| 国产真实乱偷精品视频免| 欧美无人高清视频在线观看| 日韩av一区二区在线影视| 久久国产精品久久精品国产| 亚洲一区视频在线| 国产精品推荐精品| 亚洲精品成人天堂一二三| 国产精品久久久对白| 一区二区三区欧美日韩| 亚洲日本视频| 亚洲久本草在线中文字幕| 日韩午夜av在线| 亚洲一区二区三区免费视频| 国产欧美日韩综合精品二区| 亚洲在线成人精品| 免费中文字幕日韩欧美| 性欧美疯狂xxxxbbbb| 在线一区二区三区四区五区| 另类小说综合欧美亚洲| 欧美美女直播网站| 国产成人aaa| 2017欧美狠狠色| 欧美91视频| 亚洲日本成人在线观看| 国产精品婷婷| 久久成人综合网| 91精品国产日韩91久久久久久| 成人h动漫精品一区二区| 欧美激情一区在线| 亚洲深夜激情| 麻豆精品新av中文字幕| 欧美一卡2卡3卡4卡| 欧美二区在线| 亚洲国产视频直播| 欧美精品久久天天躁| 色综合色狠狠天天综合色| 亚洲欧美国产77777| 色综合久久久久| 国产 欧美在线| 亚洲欧美自拍偷拍| 欧美在线观看一区| 91在线观看下载| 亚洲精品va在线观看| 欧美日韩黄视频| 欧美特黄一级| 久久激五月天综合精品| 国产日韩欧美制服另类| 欧美中文日韩| 97久久久精品综合88久久| 亚洲影视在线播放| 5566中文字幕一区二区电影| 欧美网站在线| 久久99热这里只有精品| 国产日韩欧美在线一区| 色哟哟精品一区| 91麻豆国产自产在线观看| 午夜影院久久久| 精品福利在线导航| 国产精品视频久久一区| 成人视屏免费看| 亚洲宅男天堂在线观看无病毒| 日韩一级黄色大片| 国产精品一区二区三区四区五区 | 亚洲444eee在线观看| 久久美女高清视频| 久久综合伊人77777麻豆| 91免费版pro下载短视频| 天使萌一区二区三区免费观看| 欧美精品一区二区蜜臀亚洲| 久久久7777| 韩日成人av| 成人免费福利片| 青青草成人在线观看| 中文字幕中文字幕一区| 制服丝袜亚洲网站| 欧美专区在线| 精品二区久久| 99精品热视频| 国产一区二区中文字幕| 一区二区三区四区在线播放| 久久久久免费观看| 欧美日韩三级一区二区| 亚洲欧美日韩国产| 亚洲五月婷婷| 91影视在线播放| 成人听书哪个软件好| 麻豆91在线播放免费| 亚洲国产另类精品专区| 国产精品国产三级国产aⅴ原创 | 午夜日韩在线电影| 亚洲男人的天堂一区二区| 国产欧美日韩在线观看| 精品福利av导航| 在线播放一区二区三区| 91激情五月电影| 久久久久成人精品免费播放动漫| 亚洲日本久久| 99re6热在线精品视频播放速度 | 精品国产一区二区在线观看| 91麻豆精品国产无毒不卡在线观看| 一本一道久久a久久精品| 亚洲一区二区高清视频| 99精品热6080yy久久| 亚洲国产精品一区二区第一页| 国产精品sss| 国产精品igao视频网网址不卡日韩| 97久久精品人人爽人人爽蜜臀|