日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

聊聊協(xié)程和管道—管道

來源: 責(zé)編: 時(shí)間:2023-08-09 23:03:10 428觀看
導(dǎo)讀管道簡(jiǎn)介【1】管道(channel)特質(zhì)介紹:(1)管道本質(zhì)就是一個(gè)數(shù)據(jù)結(jié)構(gòu)-隊(duì)列(2)數(shù)據(jù)是先進(jìn)先出(3)自身線程安全,多協(xié)程訪問時(shí),不需要加鎖,channel本身就是線程安全的(4)管道有類型的,一個(gè)string的管道只能存放string類型數(shù)據(jù)管道入門案例

管道簡(jiǎn)介

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

(1)管道本質(zhì)就是一個(gè)數(shù)據(jù)結(jié)構(gòu)-隊(duì)列OIH28資訊網(wǎng)——每日最新資訊28at.com

(2)數(shù)據(jù)是先進(jìn)先出OIH28資訊網(wǎng)——每日最新資訊28at.com

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

(4)管道有類型的,一個(gè)string的管道只能存放string類型數(shù)據(jù)OIH28資訊網(wǎng)——每日最新資訊28at.com

OIH28資訊網(wǎng)——每日最新資訊28at.com

管道入門案例

【1】管道的定義:

var 變量名 chan 數(shù)據(jù)類型OIH28資訊網(wǎng)——每日最新資訊28at.com

PS1:chan管道關(guān)鍵字OIH28資訊網(wǎng)——每日最新資訊28at.com

PS2:數(shù)據(jù)類型指的是管道的類型,里面放入數(shù)據(jù)的類型,管道是有類型的,int類型的管道只能寫入整數(shù)intOIH28資訊網(wǎng)——每日最新資訊28at.com

PS3:管道是引用類型,必須初始化才能寫入數(shù)據(jù),即make后才能使用OIH28資訊網(wǎng)——每日最新資訊28at.com

【2】案例:

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

管道的關(guān)閉

【1】管道的關(guān)閉:

使用內(nèi)置函數(shù)close可以關(guān)閉管道,當(dāng)管道關(guān)閉后,就不能再向管道寫數(shù)據(jù)了,但是仍然可以從該管道讀取數(shù)據(jù)。OIH28資訊網(wǎng)——每日最新資訊28at.com

OIH28資訊網(wǎng)——每日最新資訊28at.com

【2】案例:

func main()  {	var intChan chan int	intChan = make(chan int, 3)	intChan <- 10	intChan <- 20	//關(guān)閉管道:	close(intChan)	//再次寫入數(shù)據(jù):--->報(bào)錯(cuò)	// intChan <- 30	//當(dāng)管道關(guān)閉后,讀取數(shù)據(jù)是可以的:	num := <- intChan	fmt.Println(num)}

管道的遍歷

【1】管道的遍歷:

管道支持for-range的方式進(jìn)行遍歷,請(qǐng)注意兩個(gè)細(xì)節(jié)OIH28資訊網(wǎng)——每日最新資訊28at.com

1)在遍歷時(shí),如果管道沒有關(guān)閉,則會(huì)出現(xiàn)deadlock的錯(cuò)誤OIH28資訊網(wǎng)——每日最新資訊28at.com

2)在遍歷時(shí),如果管道已經(jīng)關(guān)閉,則會(huì)正常遍歷數(shù)據(jù),遍歷完后,就會(huì)退出遍歷。OIH28資訊網(wǎng)——每日最新資訊28at.com

【2】案例:

func main()  {	var intChan chan int	intChan = make(chan int, 100)	for i := 0; i < 100; i++ {		intChan <- i	}	//在遍歷前,如果沒有關(guān)閉管道,就會(huì)出現(xiàn)deadlock的錯(cuò)誤	//所以我們?cè)诒闅v前要進(jìn)行管道的關(guān)閉	// for v := range intChan {	// 	fmt.Println("value = ",v)	// }	close(intChan)	//遍歷:for-range	for v := range intChan {		fmt.Println("value = ",v)	}}

協(xié)程和管道協(xié)同工作案例

【1】案例需求:

請(qǐng)完成協(xié)程和管道協(xié)同工作的案例,具體要求:OIH28資訊網(wǎng)——每日最新資訊28at.com

1) 開啟一個(gè)writeData協(xié)程,向管道中寫入50個(gè)整數(shù).OIH28資訊網(wǎng)——每日最新資訊28at.com

2) 開啟一個(gè)readData協(xié)程,從管道中讀取writeData寫入的數(shù)據(jù)。OIH28資訊網(wǎng)——每日最新資訊28at.com

3) 注意: writeData和readDate操作的是同一個(gè)管道OIH28資訊網(wǎng)——每日最新資訊28at.com

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

OIH28資訊網(wǎng)——每日最新資訊28at.com

【2】原理圖:

OIH28資訊網(wǎng)——每日最新資訊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("寫入的數(shù)據(jù)為:",i)		time.Sleep(time.Second)	}		close(intChan)}//讀:func readData(intChan chan int) {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數(shù)據(jù)為:",v)		time.Sleep(time.Second)	}}func main()  {	//主線程	//寫協(xié)程和讀協(xié)程共同操作同一個(gè)管道-》定義管道:	intChan := make(chan int, 50)	wg.Add(2)	//開啟讀和寫的協(xié)程:	go writeData(intChan)	go readData(intChan)	//主線程一直在阻塞,什么時(shí)候wg減為0了,就停止	wg.Wait()	fmt.Println("讀寫數(shù)據(jù)完成...")}

運(yùn)行結(jié)果:OIH28資訊網(wǎng)——每日最新資訊28at.com

OIH28資訊網(wǎng)——每日最新資訊28at.com

聲明只讀只寫管道

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

【2】代碼:

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

管道的阻塞

【1】當(dāng)管道只寫入數(shù)據(jù),沒有讀取,就會(huì)出現(xiàn)阻塞:

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("寫入的數(shù)據(jù):",i)	}	close(intChan)}func readData(intChan chan int)  {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數(shù)據(jù)為:",v)	}}func main()  {	intChan := make(chan int, 10)	wg.Add(2)	go writeData(intChan)	// go readData(intChan)	wg.Wait()}

運(yùn)行結(jié)果OIH28資訊網(wǎng)——每日最新資訊28at.com

OIH28資訊網(wǎng)——每日最新資訊28at.com

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

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("寫入的數(shù)據(jù):",i)	}	close(intChan)}func readData(intChan chan int)  {	defer wg.Done()	for v := range intChan {		fmt.Println("讀取的數(shù)據(jù)為:",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功能:解決多個(gè)管道的選擇問題,也可以叫做多路復(fù)用,可以從多個(gè)管道中隨機(jī)公平地選擇一個(gè)來執(zhí)行

PS:case后面必須進(jìn)行的是io操作,不能是等值,隨機(jī)去選擇一個(gè)io操作OIH28資訊網(wǎng)——每日最新資訊28at.com

PS:default防止select被阻塞住,加入defaultOIH28資訊網(wǎng)——每日最新資訊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"	}()	//本身取數(shù)據(jù)就是阻塞的	// fmt.Println(<-intChan)	select {		case v := <-intChan : fmt.Println("intChan:",v)		case v := <-stringChan : fmt.Println("stringChan:",v)		default: fmt.Println("防止select被阻塞")	}}

defer+recover機(jī)制處理錯(cuò)誤

【1】問題原因:多個(gè)協(xié)程工作,其中一個(gè)協(xié)程出現(xiàn)panic,導(dǎo)致程序崩潰

【2】解決辦法:利用defer+recover捕獲panic進(jìn)行處理,即使協(xié)程出現(xiàn)問題,主線程仍然不受影響可以繼續(xù)執(zhí)行。

【3】案例:

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

結(jié)果:OIH28資訊網(wǎng)——每日最新資訊28at.com

OIH28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-5170-0.html聊聊協(xié)程和管道—管道

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用Kafka構(gòu)建事件驅(qū)動(dòng)的架構(gòu)?

下一篇: 空間智能化為產(chǎn)業(yè)轉(zhuǎn)型帶來新動(dòng)能,華為開放能力與合作伙伴共贏時(shí)代

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 5月iOS設(shè)備好評(píng)榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個(gè)榜單又重新匯總了數(shù)據(jù),像安卓陣營的榜單都有著比較大的變動(dòng),不過iOS由于設(shè)備的更新?lián)Q代并沒有那么快,所以相對(duì)來說變化并不大,特別是iOS好評(píng)榜,老款設(shè)
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機(jī)將會(huì)在第三季度上市,如今隨著時(shí)間臨近,新機(jī)的各種消息也開始浮出水面。據(jù)悉,這款新機(jī)將會(huì)被命名為&ldquo;On
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團(tuán)隊(duì)做了容器化,但是帶來的問題是服務(wù)配置文件很麻煩,然后大家在群里進(jìn)行了“親切友好”的溝通圖片圖片圖片圖片對(duì)比就對(duì)比,簡(jiǎn)單對(duì)比下獨(dú)立配置中心和k8s作為配
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對(duì)Reader和Writer接口的組合,
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對(duì)于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測(cè)。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對(duì)于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • AMD的AI芯片轉(zhuǎn)單給三星可能性不大 與臺(tái)積電已合作至2nm制程

    據(jù) DIGITIMES 消息,英偉達(dá) AI GPU 出貨逐季飆升,接下來 AMD MI 300 系列將在第 4 季底量產(chǎn)。而半導(dǎo)體業(yè)內(nèi)人士表示,近日傳出 AMD 的 AI 芯片將轉(zhuǎn)單給
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日?qǐng)?bào) 記者 王春   □ 本報(bào)通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個(gè)大學(xué)生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲视频专区在线| 一区二区三区在线看| 欧美精品在线看| 欧美区在线播放| 欧美视频一区在线| 国产欧美精品一区二区三区介绍| 好吊成人免视频| 亚洲欧洲三级电影| 亚洲视频图片小说| 久久精品国产一区二区三| 久久亚洲精品网站| 欧美日韩精品中文字幕| 国产亚洲精品久| 亚洲国产日韩精品| 亚洲色图在线视频| 久久久久天天天天| 欧美日韩国产小视频| 国产美女一区二区| 亚洲激情一区| 亚洲欧美综合网| 蜜桃av噜噜一区| 国产精品福利在线观看| 韩日精品中文字幕| 一区二区三区精品国产| 久久久精品欧美丰满| 欧美人在线视频| 国模吧视频一区| 一本一道久久综合狠狠老精东影业| 久久电影一区| 欧美日韩一区自拍| 1024成人| 欧美一区二区视频免费观看| 欧美激情亚洲一区| 韩日欧美一区二区三区| 制服丝袜亚洲播放| 美女精品在线| 国产日韩成人精品| 亚洲激情视频在线播放| 欧美影院在线播放| 欧美日韩在线免费视频| 亚洲国产日韩综合一区| 欧美主播一区二区三区| 欧美日一区二区三区在线观看国产免 | 亚洲永久免费| 欧美~级网站不卡| 国产午夜精品久久久久久免费视| 亚洲精品久久| 久久尤物视频| 国产日本亚洲高清| 亚洲天堂偷拍| 欧美人交a欧美精品| 亚洲高清123| 久久久久久有精品国产| 国产精品永久| 亚洲午夜一区二区| 欧美日韩不卡视频| 亚洲国产天堂久久综合| 久久久久久久久久看片| 国产嫩草一区二区三区在线观看| av成人免费在线| 欧美国产精品久久| 在线看不卡av| 久久久蜜桃一区二区人| 国产欧美精品xxxx另类| 亚洲欧美成人一区二区在线电影| 欧美日韩国产影院| 亚洲美女精品一区| 欧美金8天国| 亚洲精品乱码久久久久久日本蜜臀 | 国产精品国产三级欧美二区| 日韩网站免费观看| 欧美激情视频网站| 亚洲国产日韩欧美| 噜噜噜在线观看免费视频日韩| 国产视频精品va久久久久久| 亚洲欧美日韩高清| 国产精品少妇自拍| 亚洲欧美国产日韩中文字幕| 欧美三级网址| 一区二区高清在线| 欧美日韩黄视频| 99视频一区| 国产精品igao视频网网址不卡日韩| 日韩视频在线观看| 欧美人与性禽动交情品| avtt综合网| 欧美午夜欧美| 亚洲欧美日韩一区在线| 国产免费成人在线视频| 性xx色xx综合久久久xx| 国产区在线观看成人精品| 午夜一区二区三区在线观看 | 国产亚洲欧美日韩日本| 久久av一区二区三区亚洲| 国产综合视频| 六月丁香综合| 亚洲美女视频网| 欧美色中文字幕| 亚洲欧美美女| 国内欧美视频一区二区| 乱码第一页成人| 亚洲精品日韩精品| 欧美视频官网| 性欧美在线看片a免费观看| 国产一区二区三区在线观看网站| 久久嫩草精品久久久精品| 在线精品高清中文字幕| 欧美激情一区二区三区在线 | 欧美成年人视频网站| 亚洲美女尤物影院| 国产精品久久久久一区二区| 欧美在线亚洲一区| 在线成人激情视频| 欧美日韩精品一区二区| 欧美亚洲一区二区在线观看| 一区二区亚洲精品| 欧美日韩成人一区二区| 午夜久久美女| 亚洲国产成人91精品| 欧美日韩亚洲一区三区| 欧美一二区视频| 亚洲国产精品va在线观看黑人| 欧美日韩亚洲一区二区| 欧美一级淫片aaaaaaa视频| 亚洲成在线观看| 欧美香蕉大胸在线视频观看| 久久国产欧美| 日韩视频一区二区在线观看 | 久久久www成人免费毛片麻豆| 最近看过的日韩成人| 国产精品久久久久久久久久直播| 久久久精品视频成人| 日韩视频不卡| 国产亚洲精品美女| 欧美激情综合五月色丁香| 亚洲欧美日韩精品在线| 亚洲第一二三四五区| 国产精品成人一区二区三区夜夜夜 | 欧美一区二区三区四区在线观看地址 | 一本色道久久综合一区| 国产午夜亚洲精品不卡| 欧美精品久久99久久在免费线| 亚洲欧美激情精品一区二区| 亚洲国产精品第一区二区三区| 国产精品久久久久久模特 | 午夜精品国产更新| 亚洲精品国产精品久久清纯直播| 国产精品永久在线| 欧美人在线观看| 久久久www成人免费无遮挡大片| 亚洲精品在线一区二区| 国产一区999| 国产精品av久久久久久麻豆网| 久久久久国产精品一区二区| 亚洲午夜羞羞片| 亚洲黄色一区| 国产视频一区在线| 欧美日韩视频在线一区二区 | 欧美女人交a| 久久中文字幕导航| 午夜一级在线看亚洲| 日韩视频免费大全中文字幕| 狠狠色综合一区二区| 国产精品日本精品| 欧美日本中文字幕| 免费成人av在线| 欧美在线视频导航| 亚洲视频大全| 日韩视频永久免费| 亚洲欧洲精品一区二区三区不卡| 国产午夜精品一区二区三区欧美 | 欧美日韩一区二区三区| 欧美成人免费一级人片100| 久久国产精品毛片| 午夜精品久久久久影视| 一本色道久久综合亚洲精品不| 亚洲韩国一区二区三区| 精品51国产黑色丝袜高跟鞋| 国产欧美日韩激情| 国产精品久久久久三级| 欧美视频一区在线观看| 欧美日韩一卡二卡| 欧美日韩精品综合在线| 欧美激情2020午夜免费观看| 你懂的视频一区二区| 老牛嫩草一区二区三区日本| 欧美中文字幕久久| 欧美在线观看你懂的| 亚洲欧美日韩一区二区在线| 亚洲香蕉伊综合在人在线视看| 夜夜嗨av色综合久久久综合网| 亚洲青涩在线| 亚洲人成在线播放| 亚洲人成网站在线观看播放| 亚洲福利视频三区| 在线观看中文字幕不卡| 一区一区视频| 伊人久久亚洲热| 在线观看欧美亚洲| 亚洲国产精品ⅴa在线观看| 亚洲国产欧美在线人成| 最新精品在线| 亚洲另类春色国产| 亚洲最黄网站|