channel通道的一些細節

2021-10-09 19:28:53 字數 1058 閱讀 9604

在go語言中需要使用內建函式make來建立乙個通道

make的第乙個引數是關鍵字chan,之後跟著允許通道交換的資料型別。如果建立的是乙個有快取的通道,之後還要再第二個引數指定快取區的大小。

//無快取的整形通道

unbuffered:=

make

(chan

int)

//有快取的字串通道

buffered:=

make

(chan

string,10

)

向通道傳送值或指標需要用到 <- 操作符

//建立乙個有快取的字串通道

buffered:=

make

(chan

string,10

)//通過通道傳送乙個字串

buffered<-

"gopher"

//從通道接受乙個字串

value:=

<-buffered

注:

無緩衝的通道是指在接收前沒有能力儲存任何值得通道,這種通道要求傳送goroutine和接收goroutine同時準備好,才能完成傳送和接收的操作,如果兩個goroutine沒有同時準備好,通道會導致先執行傳送或接收的goroutine阻塞等待,這種對通道進行傳送和接受的行為本身就是同步的,其中任意乙個操作都無法離開另乙個操作而單獨存在。

有緩衝通道是乙個在被接受前能儲存乙個或多個值的通道。這種型別的通道並不強制要求goroutine之間必須同時完成傳送和接收,通道會阻塞傳送和接收的動作也會不同,只有在通道沒有要接收的值時,接收動作才會阻塞,只有通道沒有可用快取區容納被傳送的值時,傳送動作才會被阻塞,這導致有快取的通道和無快取的通道之間的乙個很大的不同:無緩衝的通道保證進行傳送和接收的goroutine會在同一時間進行資料的交換,有緩衝的通道沒有這種保證。

關閉通道:當通道關閉後,goroutine依舊可以從通道接收資料,但不能再向通道裡傳送資料。

從乙個已經關閉且沒有資料的通道裡獲取資料,總會立刻返回,並返回乙個通道型別的零值。

C 的一些細節

1.c 中,將負數賦值給unsigned是完全合法的。例如,將 1賦值給unsigned char,那麼結果是255.2.c 中,double的精度和計算速度都要超過float,long double則需要承擔額外的執行代價。3.std ou t hi d endl 等價於std out hi 4....

迴圈的一些細節

1 迴圈執行次數相同,大迴圈放在外面還是小迴圈放在外層效率高呢?int end1 10 int end2 100 int end3 1000000 long starttime system.nanotime 開始時間 for int i 1 i end3 i long endtime system...

SDWebImage的一些細節

清空快取 cleandisk 清除過期快取,計算當前快取的大小,和設定的最大快取數量比較,如果超出那麼會繼續刪除 按照檔案穿件的先後順序 cleardisk 直接刪除重新建立 7天 sdwebimagemanager sharedmanager imagecache cleandisk 取消當前所有...