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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

go chan 缓存与阻塞

發(fā)布時(shí)間:2024/9/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go chan 缓存与阻塞 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接:Go語(yǔ)言第十一課 并發(fā)(三)Channel緩存與阻塞

Channel的緩存

前面介紹過(guò)channel的創(chuàng)建方法:

channel_test := make(chan string)

其實(shí)它完整的寫法應(yīng)該是:

channel_test := make(chan string,0)

這種容量為0的channel就是無(wú)緩存channel。對(duì)應(yīng)地,我們也可以創(chuàng)建有緩存channel

channel_test := make(chan string,1)

無(wú)緩存channel

channel是否有緩存最根本的不同是阻塞策略的不同。

無(wú)緩存的channel會(huì)在讀寫兩端產(chǎn)生阻塞即:

當(dāng)對(duì)一個(gè)無(wú)緩存的channel讀時(shí),若數(shù)據(jù)尚未到達(dá),則讀協(xié)程阻塞;當(dāng)對(duì)一個(gè)無(wú)緩存的channel寫時(shí),若數(shù)據(jù)尚未消費(fèi),則寫協(xié)程阻塞。

基于此,無(wú)緩存的channel也成為同步channel

需要特別注意的是,當(dāng)數(shù)據(jù)尚未被消費(fèi)時(shí),接收者接收數(shù)據(jù)發(fā)生在喚醒發(fā)送者協(xié)程之前!

有緩存channel

帶緩存的channel實(shí)際上是一個(gè)阻塞隊(duì)列。對(duì)隊(duì)列的寫總發(fā)生在隊(duì)尾,隊(duì)列滿時(shí)寫協(xié)程阻塞;對(duì)隊(duì)列的讀總發(fā)生在隊(duì)尾,隊(duì)列空時(shí)讀協(xié)程阻塞。

內(nèi)置函數(shù)cap(channel)可以讀取隊(duì)列的總長(zhǎng)度。

內(nèi)置隊(duì)列l(wèi)en(channel)可以讀取隊(duì)列的有效長(zhǎng)度(已使用長(zhǎng)度)。

有緩存的channel的最大意義在于生產(chǎn)和消費(fèi)可以解耦。

協(xié)程泄漏

協(xié)程永遠(yuǎn)阻塞,無(wú)法退出。即協(xié)程泄漏。協(xié)程的泄漏無(wú)法被自動(dòng)回收,所以要極力避免!要確保每個(gè)協(xié)程都可以正常退出。

轉(zhuǎn)載于:https://www.cnblogs.com/wangjq19920210/p/11527106.html

總結(jié)

以上是生活随笔為你收集整理的go chan 缓存与阻塞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。