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

溫馨提示×

溫馨提示×

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

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

Golang中的Goroutine如何理解

發布時間:2022-01-17 16:32:11 來源:億速云 閱讀:163 作者:kk 欄目:大數據

Golang中的Goroutine如何理解,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

什么是Go協程

Go協程(Goroutine)是與其他函數同時運行的函數。可以認為Go協程是輕量級的線程,由Go運行時來管理。

在函數調用前加上go關鍵字,這次調用就會在一個新的goroutine中并發執行。當被調用的函數返回時,這個goroutine也自動結束。聽著感覺像C# 中的Task。

需要注意的是,如果這個函數有返回值,那么這個返回值會被丟棄。

Golang中的Goroutine如何理解

Go 協程(Goroutine)之間通過信道(channel)進行通信,簡單的說就是多個協程之間通信的管道。信道可以防止多個協程訪問共享內存時發生資源爭搶的問題。

如何使用

package main
import (      "fmt"    "time")
func hello() {      fmt.Println("Hello world goroutine")}func main() {      go hello()    time.Sleep(1 * time.Second)    fmt.Println("main function")}

Channel(管道)

Channel(管道) 可以被認為是協程之間通信的管道。與水流從管道的一端流向另一端一樣,數據可以從信道的一端發送并在另一端接收。

1. 定義

每個channel都有一個類型。此類型是允許信道傳輸的數據類型。channel是類型相關的,一個channel只能傳遞一種類型的值,這個類型需要在聲明channel時指定。

 

2. 聲明

a. 我們需要通過內置函數 make 來創建一個信道。

下面的代碼聲明了一個信道:

var ch chan int

b. 與其他變量定義一樣,快速聲明也是定義信道的一種有效而簡潔的方式:

a := make(chan int)

c. 創建一個帶緩沖的channel

c := make(chan int, 1024)
// 從帶緩沖的channel中讀數據for i:=range c {  ...}

3. 發送和接收數據

通過信道發送和接收數據的語法如下:

data := <- a   // 從channel a 讀取數據 a <- data      // 將數據寫入到 channel a

箭頭的指向說明了數據是發送還是接收,是不是特別簡單?

完整例子

下面就直接說說,Goroutine和channel 共同使用的完整例子:

package main
import (    "fmt"    "time")
func Producer(queue chan<- int) {    for i := 0; i < 10; i++ {        queue <- i //寫入        fmt.Println("create :", i)    }}
func Consumer(queue <-chan int) {    for i := 0; i < 10; i++ {        v := <-queue  // 讀出        fmt.Println("receive:", v)    }}
func main() {    queue := make(chan int, 88)    go Producer(queue)    go Consumer(queue)    time.Sleep(1 * time.Second)}

golang的優點

golang是一種編譯語言,可以將代碼編譯為機器代碼,編譯后的二進制文件可以直接部署到目標機器而無需額外的依賴,所以golang的性能優于其他的解釋性語言,且可以在golang中使用goroutine來實現并發性,它提供了一個非常優雅的goroutine調度程序系統,可以很容易地生成數百萬個goroutine。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

明溪县| 阿拉善左旗| 韶关市| 珠海市| 赤水市| 铜山县| 密云县| 彝良县| 大连市| 西和县| 海阳市| 沐川县| 疏附县| 云阳县| 专栏| 靖安县| 红桥区| 方正县| 临泽县| 彰化市| 文化| 顺义区| 平安县| 砚山县| 平昌县| 大悟县| 阳谷县| 唐山市| 边坝县| 平远县| 乐陵市| 嘉义县| 龙游县| 长子县| 新丰县| 崇明县| 苏尼特右旗| 西峡县| 阿合奇县| 黑龙江省| 丰原市|