golang channel底層實現?

底層數據實現

type hchan struct {
? ? qcount ? uint ? ? ? ? ? // 當前隊列中的元素數量
? ? dataqsiz uint ? ? ? ? ? // 環形隊列的大小
? ? buf ? ? ?unsafe.Pointer // 指向環形隊列的指針
? ? elemsize uint16 ? ? ? ? // 元素大小
? ? closed ? uint32 ? ? ? ? // channel 是否關閉
? ? elemtype *_type ? ? ? ? // 元素類型
? ? sendx ? ?uint ? ? ? ? ? // 發送索引
? ? recvx ? ?uint ? ? ? ? ? // 接收索引
? ? recvq ? ?waitq ? ? ? ? ?// 接收等待隊列
? ? sendq ? ?waitq ? ? ? ? ?// 發送等待隊列
? ? lock ? ? mutex ? ? ? ? ?// 互斥鎖
}

  • buf是有緩沖的channel所特有的結構,用來存儲緩存數據。是個循環鏈表
  • sendxrecvx用于記錄buf這個循環鏈表中的發送或者接收的index
  • recvqsendq分別是接收(<-channel)或者發送(channel <- xxx)的goroutine抽象出來的結構體(sudog)的隊列。是個雙向鏈表
  • ? lock 互斥鎖在進行獲取或者接收時都會進行加鎖操作

channel的使用

創建channel實際上就是在內存中實例化了一個hchan的結構體,并返回一個ch指針

當channel緩存滿了,或者沒有緩存的時候,我們繼續send(ch <- xxx)或者recv(<- ch)會阻塞當前goroutine

nil channel有值 channel沒值 channel滿 channel
<- ch (發送數據)阻塞發送成功發送成功阻塞
ch <- (接收數據)阻塞接收成功阻塞接收成功
close(ch) 關閉channelpanic關閉成功關閉成功關閉成功

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70080.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖的最小生成樹算法: Prim算法和Kruskal算法(C++)

上一節我們學習了最短路徑算法, 這一節來學習最小生成樹. 最小生成樹(Minimum Spanning Tree, MST)算法是圖論中的一種重要算法, 主要用于在加權無向圖中找到一棵生成樹, 使得這棵樹包含圖中的所有頂點, 并且所有邊的權重之和最小. 這樣的樹被稱為最小生成樹. 最小生成樹廣泛應…

矩陣系統源碼搭建的數據管理開發功能解析,支持OEM

一、引言 在矩陣系統中&#xff0c;數據猶如血液&#xff0c;貫穿整個系統的運行。高效的數據管理開發功能是確保矩陣系統穩定、可靠運行的關鍵&#xff0c;它涵蓋了數據的存儲、處理、安全等多個方面。本文將深入探討矩陣系統源碼搭建過程中數據管理功能的開發要點。 二、數據…

DeepSeek 助力 Vue 開發:打造絲滑的日期選擇器(Date Picker),未使用第三方插件

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

操作系統知識點2

1.P&#xff0c;V操作可以實現進程同步&#xff0c;進程互斥&#xff0c;進程的前驅關系 2.先來先服務調度算法是不可搶占的算法 3.UNIX操作系統中&#xff0c;對文件系統中空閑區的管理通常采用成組鏈接法 4.對于FAT32文件系統&#xff0c;它采用的是鏈接結構 5.不同的I/O…

【個人開發】deepspeed+Llama-factory 本地數據多卡Lora微調【完整教程】

文章目錄 1.背景2.微調方式2.1 關鍵環境版本信息2.2 步驟2.2.1 下載llama-factory2.2.2 準備數據集2.2.3 微調模式2.2.3.1 zero-1微調2.2.3.2 zero-2微調2.2.3.3 zero-3微調2.2.3.4 單卡Lora微調 2.2.4 實驗2.2.4.1 實驗1&#xff1a;多GPU微調-zero12.2.4.2 實驗2&#xff1a;…

iOS 中使用 FFmpeg 進行音視頻處理

在 iOS 中使用 FFmpeg 進行音視頻處理,通常需要將 FFmpeg 的功能集成到項目中。由于 FFmpeg 是一個 C 庫,直接在 iOS 中使用需要進行一些配置和封裝。 1. 在 iOS 項目中集成 FFmpeg 方法 1:使用 FFmpeg 預編譯庫 下載 FFmpeg iOS 預編譯庫: 可以從以下項目中獲取預編譯的 …

Elasticsearch:將 Ollama 與推理 API 結合使用

作者&#xff1a;來自 Elastic Jeffrey Rengifo Ollama API 與 OpenAI API 兼容&#xff0c;因此將 Ollama 與 Elasticsearch 集成非常容易。 在本文中&#xff0c;我們將學習如何使用 Ollama 將本地模型連接到 Elasticsearch 推理模型&#xff0c;然后使用 Playground 向文檔提…

openGauss 3.0 數據庫在線實訓課程18:學習視圖管理

前提 我正在參加21天養成好習慣| 第二屆openGauss每日一練活動 課程詳見&#xff1a;openGauss 3.0.0數據庫在線實訓課程 學習目標 掌握openGauss視圖的管理&#xff1a;創建視圖、刪除視圖、查詢視圖的信息、修改視圖的信息。 課程作業 1.創建表&#xff0c;創建普通視圖…

騰訊云大模型知識引擎×DeepSeek賦能文旅

騰訊云大模型知識引擎DeepSeek賦能文旅 ——以合肥文旅為例的技術革新與實踐路徑 一、技術底座&#xff1a;知識引擎與DeepSeek的融合邏輯 騰訊云大模型知識引擎與DeepSeek模型的結合&#xff0c;本質上是**“知識庫檢索增強生成&#xff08;RAG&#xff09;實時聯網能力”**…

利用SkinMagic美化MFC應用界面

MFC(Microsoft Foundation Class)應用程序的界面設計風格通常比較保守,而且雖然MFC框架的控件功能強大且易于集成,但視覺效果較為樸素,缺乏現代感。尤其是MFC應用程序的設計往往以功能實現為核心,界面設計可能顯得較為簡潔甚至略顯呆板,用戶體驗可能不如現代應用程序流暢…

qt QOpenGLTexture詳解

1. 概述 QOpenGLTexture 是 Qt5 提供的一個類&#xff0c;用于表示和管理 OpenGL 紋理。它封裝了 OpenGL 紋理的創建、分配存儲、綁定和設置像素數據等操作&#xff0c;簡化了 OpenGL 紋理的使用。 2. 重要函數 構造函數&#xff1a; QOpenGLTexture(const QImage &image,…

nlp|微調大語言模型初探索(2),訓練自己的聊天機器人

前言 上篇文章記錄了具體的微調語言大模型步驟&#xff0c;以及在微調過程中可能遇見的各種報錯&#xff0c;美中不足的是只是基于開源數據集的微調&#xff0c;今天來記錄一下怎么基于自己的數據集去微調大語言模型&#xff0c;訓練自己的智能機器人&#xff01;&#xff01;&…

Java 大視界 -- 量子計算時代 Java 大數據的潛在變革與應對策略(88)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

手機功耗BugReport字段含義介紹

BugReport一般用來分析功耗問題&#xff0c;例如休眠待機&#xff0c;后臺待機&#xff0c;游戲&#xff0c;視頻&#xff0c;相機場景等 BugReport字段含義介紹 BugReport字段 含義 備注 Reboot 設備的重啟事件 CPU running CPU運行狀態&#xff0c;休眠 或者 喚醒 只有…

什么是 近端策略優化算法PPO

什么是 近端策略優化算法PPO 近端策略優化算法(Proximal Policy Optimization,PPO)是OpenAI公司于2017年開發的一系列無模型強化學習算法,用于優化策略網絡以最大化累計獎勵。以下是具體介紹及示例: 算法原理 策略梯度:PPO基于策略梯度算法,通過估計策略網絡的梯度來更…

計算機視覺-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估計出變換&#xff0c;就可以拼接兩張圖片 ①提取特征 ②匹配特征 ③拼接圖像 1.2 點的特征 怎么找到對應點&#xff1f;&#xff08;才能做點對應關系RANSAC&#xff09; &#xff1a;特征檢測 我們希望找到的點具有的特征有什么特…

個人搭建CDN加速服務 特網科技

在互聯網快速發展的今天&#xff0c;網站的加載速度對用戶體驗有著至關重要的影響&#xff0c;傳統的網頁加載方式依賴于服務器的性能和網絡環境&#xff0c;這使得某些網站的頁面加載時間過長&#xff0c;用戶體驗不佳&#xff0c;為了解決這個問題&#xff0c;許多企業開始采…

類型通配符上限

主函數 package typeWildcardTop;import java.util.ArrayList;public class typeWildcardTopTest {/**/public static void main(String[] args) { // test1();test2();}/*測試showList接收ArrayList類型 ArrayList接收各種類型參數創建animals cats mincats集合 傳入s…

OpenCV(1):簡介、安裝、入門案例、基礎模塊

1 OpenCV 簡介 OpenCV 是一個功能強大、應用廣泛的計算機視覺庫&#xff0c;它為開發人員提供了豐富的工具和算法&#xff0c;可以幫助他們快速構建各種視覺應用。隨著計算機視覺技術的不斷發展&#xff0c;OpenCV 也將會繼續發揮重要的作用。OpenCV 提供了大量的計算機視覺算法…

FTP自動上傳/vue打包自動上傳

ftp自動上傳 在我們平時開發項目時&#xff0c;需要將本地代碼編譯后上傳到服務器&#xff0c;我們可以借助Node.js庫中的ssh2來實現自動上傳 首先我們先來說下ssh2的安裝和使用 安裝ssh2 npm install ssh2創建ssh2實例 const { Client } require(ssh2);連接服務器 const c…