日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go中有缓存通道和无缓存通道区别

發布時間:2024/4/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go中有缓存通道和无缓存通道区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

golang channel 有緩沖 與 無緩沖 是有重要區別的

我之前天真的認為 有緩沖與無緩沖的區別 只是 無緩沖的 是 默認 緩沖 為1 的緩沖式

其實是徹底錯誤的,無緩沖的與有緩沖channel有著重大差別

那就是一個是同步的 一個是非同步的

怎么說?比如

c1:=make(chan int)????? ? 無緩沖

c2:=make(chan int,1)????? 有緩沖

c1<-1 ? ? ? ? ? ? ? ? ? ? ? ? ? ?

無緩沖的 不僅僅是 向 c1 通道放 1 而是 一直要有別的攜程 <-c1 接手了 這個參數,那么c1<-1才會繼續下去,要不然就一直阻塞著

而 c2<-1 則不會阻塞,因為緩沖大小是1 只有當 放第二個值的時候 第一個還沒被人拿走,這時候才會阻塞。

打個比喻

無緩沖的 ?就是一個送信人去你家門口送信 ,你不在家 他不走,你一定要接下信,他才會走。

無緩沖保證信能到你手上

有緩沖的 就是一個送信人去你家仍到你家的信箱 轉身就走 ,除非你的信箱滿了 他必須等信箱空下來。

有緩沖的 保證 信能進你家的郵箱

?

看測試代碼

有緩沖的

1 package main 2 3 import "fmt" 4 5 var c = make(chan int, 1) 6 7 func f() { 8 9 c <- 'c' 10 11 fmt.Println("在goroutine內") 12 } 13 14 func main() { 15 go f() 16 17 c <- 'c' 18 <-c 19 <-c 20 21 fmt.Println("外部調用") 22 }

?

無緩沖的

// pp package mainimport ("fmt" ) func writeRoutine(test_chan chan int, value int) { test_chan <- value } func readRoutine(test_chan chan int) { <-test_chan return } func main() { c := make(chan int) x := 100 //readRoutine(c) //go writeRoutine(c, x) //writeRoutine(c, x) //go readRoutine(c) //go readRoutine(c) //writeRoutine(c, x) go writeRoutine(c, x)

   go writeRoutine(c, x)readRoutine(c)fmt.Println(x) }

?可以在部分代碼注釋掉,看效果,再體會下

轉載于:https://www.cnblogs.com/Ellon-Daris/p/5403846.html

總結

以上是生活随笔為你收集整理的go中有缓存通道和无缓存通道区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。