golang 併發編程基礎篇(一)
channel的阻塞的狀況
無緩衝channel的阻塞
- 阻塞是一個聽上去逼格很高的一個詞,其實就是程序停了,杵在那兒等待程序繼續運行的條件,這個條件不發生的話,程序就死翹翹了。
- 無緩衝channel阻塞的例子之常見的channel誤用
- 無緩衝channel阻塞的條件:發送方和接收方須要同時準備好,不然對方的協程就會阻塞。在ch <- "cmd.0"這個位置,由於沒有接收channel數據的協程,一直阻塞,因此,程序不會往下執行 go func,天然就會報錯:死鎖
- 解決這個死鎖。只要先把接收方協程起了,再往channel發送就行,或者使用有緩衝的channel。
有緩衝channel的阻塞
- 有緩衝channel阻塞總結,channel爲空時,接收方阻塞,channel滿時,發送方阻塞。有緩衝channel的這個特性能夠用在構建鏈接池上。
歡迎關注本站公眾號,獲取更多信息