您好,登錄后才能下訂單哦!
go語言中channel可以理解是一個先進先出的隊列,通過管道進行通信。
CSP 模型:傳統的并發模型主要分為 Actor 模型和 CSP 模型,CSP 模型全稱為 communicating sequential processes,CSP 模型由并發執行實體(進程,線程或協程),和消息通道組成,實體之間通過消息通道發送消息進行通信。和 Actor 模型不同,CSP 模型關注的是消息發送的載體,即通道,而不是發送消息的執行實體。
它的操作符是箭頭 <- 。
ch <- v // 發送值v到Channel ch中
v := <-ch // 從Channel ch中接收數據,并將數據賦值給v
(箭頭的指向就是數據的流向)
可以理解為某種類型的值傳遞的導管,而這種在 channel 中傳遞的類型成為 channle 的 element type 元素類型。
一個使用make創建的,對數據結構的引用,當把 channel 作為參數使用時,實際上是傳引用調用
channel 的零值: nil
channel 可以看成一個 FIFO 隊列,對 FIFO 隊列的讀寫都是原子的操作,不需要加鎖。對 channel 的操作行為結果總結如下:
讀取一個已關閉的 channel 時,總是能讀取到對應類型的零值,為了和讀取非空未關閉 channel 的行為區別,可以使用兩個接收值:
// ok is false when ch is closedv, ok := <-ch
golang 中大部分類型都是值類型(只有 slice / channel / map 是引用類型),讀/寫類型是值類型的 channel 時,如果元素 size 比較大時,應該使用指針代替,避免頻繁的內存拷貝開銷。
以上就是golang channel有什么好處的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。