亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言怎么使用goroutine及通道實現并發

發布時間:2022-08-25 10:47:48 來源:億速云 閱讀:160 作者:iii 欄目:開發技術

今天小編給大家分享一下Go語言怎么使用goroutine及通道實現并發的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

使用通道接收數據

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

使用通道接收數據的特性如下:

  • 通道的發送和接收操作在不同的兩個goroutine間進行,由于通道中的數據在沒有接收方接收時會持續阻塞,所以通道的接收必定在另外一個goroutine中進行;

  • 如果在接收方接收時,通道中沒有發送方發送數據,則接收方也會發生阻塞,直到發送方發送消息為止;

  • 通道一次只能接收一個元素數據;

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

阻塞接收數據

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

data := <-ch

執行該語句時將會阻塞,直到接收到數據并賦值給data變量

非阻塞接收數據

在使用非阻塞方式從通道接收數據時,語句不會發生阻塞,格式如下

data, ok := <-ch

data:接收到的數據,在未接收到數據時data為通道類型的零值

ok:是否接收到數據

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

接收任意數據,忽略掉接收的數據

寫法如下:

<-ch

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

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

Go語言怎么使用goroutine及通道實現并發

循環接收數據

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

for data := range ch{
}

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

遍歷通道數據的示例如下圖所示:

Go語言怎么使用goroutine及通道實現并發

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

ch <- v       把v發送到通道ch中

v := <-ch     從ch接收數據,并把值賦給v

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

Go語言怎么使用goroutine及通道實現并發

以上就是“Go語言怎么使用goroutine及通道實現并發”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巫山县| 陆河县| 天等县| 屏山县| 抚松县| 沂南县| 宁远县| 绥江县| 靖远县| 七台河市| 灌南县| 峡江县| 南木林县| 榆林市| 常德市| 鹤峰县| 大田县| 和静县| 丰宁| 弥渡县| 齐齐哈尔市| 十堰市| 资兴市| 崇左市| 临江市| 正镶白旗| 富平县| 宽甸| 长泰县| 资兴市| 沙坪坝区| 卢湾区| 新余市| 安龙县| 高雄县| 安吉县| 广德县| 西林县| 谢通门县| 宁城县| 车致|