最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

通道的數(shù)據(jù)接收有四種寫法,接下來一一進行介紹

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

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

data := <-ch

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

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

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

data, ok := <-ch

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

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

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

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

寫法如下:

<-ch

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

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

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

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

for data := range ch{
}

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

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

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

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

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

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

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

相關文章

  • golang通過http訪問外部網(wǎng)址的操作方法

    golang通過http訪問外部網(wǎng)址的操作方法

    這篇文章主要介紹了golang通過http訪問外部網(wǎng)址的操作方法,分為?get方式訪問外部的接口,Post方式請求外部接口,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Go語言eclipse環(huán)境搭建圖文教程

    Go語言eclipse環(huán)境搭建圖文教程

    這篇文章主要介紹了Go語言eclipse環(huán)境搭建的方法,結(jié)合圖文形式詳細分析了在eclipse環(huán)境下開發(fā)Go語言所涉及的組件下載、安裝及相關設置方法,需要的朋友可以參考下
    2016-07-07
  • 最新評論

    大渡口区| 广南县| 克拉玛依市| 台东县| 辽阳县| 东兰县| 霍州市| 甘泉县| 凉城县| 南涧| 临江市| 孙吴县| 义乌市| 南安市| 铜鼓县| 湛江市| 株洲县| 新乡县| 绥宁县| 开封县| 青阳县| 如皋市| 杭锦后旗| 延吉市| 罗源县| 浮山县| 乐至县| 丰县| 凯里市| 龙川县| 灌南县| 贵州省| 上饶市| 灯塔市| 东阿县| 天峻县| 台安县| 昭平县| 怀柔区| 襄城县| 西吉县|