亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解

 更新時(shí)間:2022年08月24日 17:13:45   作者:陳博士  
這篇文章主要為大家介紹了Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

使用通道接收數(shù)據(jù)

在上一篇文章中介紹了通道以及使用通道發(fā)送數(shù)據(jù),本篇接著了解通道的基本內(nèi)容,如何使用通道接收數(shù)據(jù);

通道的接收同樣使用"<-"操作符;

使用通道接收數(shù)據(jù)的特性如下:

  • 通道的發(fā)送和接收操作在不同的兩個(gè)goroutine間進(jìn)行,由于通道中的數(shù)據(jù)在沒(méi)有接收方接收時(shí)會(huì)持續(xù)阻塞,所以通道的接收必定在另外一個(gè)goroutine中進(jìn)行;
  • 如果在接收方接收時(shí),通道中沒(méi)有發(fā)送方發(fā)送數(shù)據(jù),則接收方也會(huì)發(fā)生阻塞,直到發(fā)送方發(fā)送消息為止;
  • 通道一次只能接收一個(gè)元素?cái)?shù)據(jù);

通道的數(shù)據(jù)接收有四種寫(xiě)法,接下來(lái)一一進(jìn)行介紹

阻塞接收數(shù)據(jù)

阻塞模式在接收數(shù)據(jù)時(shí),將接收變量作為"<-"操作符的左值,格式如下:

data := <-ch

執(zhí)行該語(yǔ)句時(shí)將會(huì)阻塞,直到接收到數(shù)據(jù)并賦值給data變量

非阻塞接收數(shù)據(jù)

在使用非阻塞方式從通道接收數(shù)據(jù)時(shí),語(yǔ)句不會(huì)發(fā)生阻塞,格式如下

data, ok := <-ch

data:接收到的數(shù)據(jù),在未接收到數(shù)據(jù)時(shí)data為通道類型的零值

ok:是否接收到數(shù)據(jù)

非阻塞的通道接收方法,可能造成高的CPU占用,因此使用非常少,如果需要實(shí)現(xiàn)接收超時(shí)檢測(cè),則需要配合select和計(jì)時(shí)器進(jìn)行;

接收任意數(shù)據(jù),忽略掉接收的數(shù)據(jù)

寫(xiě)法如下:

<-ch

使用上面的這種寫(xiě)法,會(huì)發(fā)生阻塞,直到接收到消息,但是通道在接收到數(shù)據(jù)后會(huì)將其忽略掉;這個(gè)方式實(shí)際上只是通過(guò)通道在goroutine間阻塞收發(fā),從而實(shí)現(xiàn)并發(fā)同步;

使用通道做并發(fā)同步的示例如下圖所示:

循環(huán)接收數(shù)據(jù)

通道的數(shù)據(jù)接收可以借用for-range語(yǔ)句進(jìn)行多個(gè)元素的接收操作,格式如下:

for data := range ch{
}

通道ch是可以被遍歷的,遍歷的結(jié)果就是接收到的數(shù)據(jù),數(shù)據(jù)類型就是通道的數(shù)據(jù)類型,通過(guò)for遍歷獲得的變量只有一個(gè),即上面例子中的data;

遍歷通道數(shù)據(jù)的示例如下圖所示:

通道可以在兩個(gè)goroutine之間通過(guò)傳遞一個(gè)指定類型的值來(lái)同步運(yùn)行和通訊,操作符"<-"用于指定通道的方向、發(fā)送和接收,如果未指定方向,則為雙向通道;

ch <- v       把v發(fā)送到通道ch中

v := <-ch     從ch接收數(shù)據(jù),并把值賦給v

下面列舉一個(gè)示例通過(guò)兩個(gè)goroutine計(jì)算數(shù)字之和,如下圖所示:

以上就是通道接收數(shù)據(jù)的相關(guān)內(nèi)容,更多關(guān)于Go goroutine通道并發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析go逆向符號(hào)恢復(fù)

    淺析go逆向符號(hào)恢復(fù)

    這篇文章主要介紹了go逆向符號(hào)恢復(fù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Golang編寫(xiě)自定義IP限流中間件的方法詳解

    Golang編寫(xiě)自定義IP限流中間件的方法詳解

    這篇文章給大家詳細(xì)的介紹了Golang編寫(xiě)自定義IP限流中間件的方法,文章通過(guò)代碼實(shí)例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • golang time包做時(shí)間轉(zhuǎn)換操作

    golang time包做時(shí)間轉(zhuǎn)換操作

    這篇文章主要介紹了golang time包做時(shí)間轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go通過(guò)不變性優(yōu)化程序詳解

    Go通過(guò)不變性優(yōu)化程序詳解

    這篇文章主要為大家介紹了Go通過(guò)不變性優(yōu)化程序?qū)嵗斀?,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解golang RWMutex讀寫(xiě)互斥鎖源碼分析

    詳解golang RWMutex讀寫(xiě)互斥鎖源碼分析

    這篇文章主要介紹了詳解golang RWMutex讀寫(xiě)互斥鎖源碼分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Golang?Redis連接池實(shí)現(xiàn)原理及示例探究

    Golang?Redis連接池實(shí)現(xiàn)原理及示例探究

    這篇文章主要為大家介紹了Golang?Redis連接池實(shí)現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 淺談golang 中time.After釋放的問(wèn)題

    淺談golang 中time.After釋放的問(wèn)題

    這篇文章主要介紹了淺談golang 中time.After釋放的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 以Golang為例詳解AST抽象語(yǔ)法樹(shù)的原理與實(shí)現(xiàn)

    以Golang為例詳解AST抽象語(yǔ)法樹(shù)的原理與實(shí)現(xiàn)

    AST?使用樹(shù)狀結(jié)構(gòu)來(lái)表達(dá)編程語(yǔ)言的結(jié)構(gòu),樹(shù)中的每一個(gè)節(jié)點(diǎn)都表示源碼中的一個(gè)結(jié)構(gòu),本文將以GO語(yǔ)言為例,為大家介紹一下AST抽象語(yǔ)法樹(shù)的原理與實(shí)現(xiàn),希望對(duì)大家有所幫助
    2024-01-01
  • GoLang nil與interface的空指針深入分析

    GoLang nil與interface的空指針深入分析

    Go語(yǔ)言中任何類型在未初始化時(shí)都對(duì)應(yīng)一個(gè)零值:布爾類型是false,整型是0,字符串是"",而指針、函數(shù)、interface、slice、channel和map的零值都是nil
    2022-12-12
  • 解決golang.org不能訪問(wèn)的問(wèn)題(推薦)

    解決golang.org不能訪問(wèn)的問(wèn)題(推薦)

    這篇文章主要介紹了解決golang.org不能訪問(wèn)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11

最新評(píng)論