golang的context和chan 的使用

1. context 作用

context包的context的接口,主要是控制協程執行上下文的時間,以及取消程序的執行,以及上下文中傳遞數據等作用,golang中耗時或者需要協同的操作都會見到context的身影。

context有幾個常用的方法

1.1 context.Backgroud()

創建一個空白的,頂級的,不會被取消的上下文。

1.2 context.WithTimeout

創建一個有執行時間限制的上下文
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}
可以通過ctx.Done()方法獲取上下超時的通知。

package mainimport ("context""fmt""time"
)func main() {parentCxt := context.Background()ctx, cancel := context.WithTimeout(parentCxt, time.Second*5)go longTimeTask(ctx)time.Sleep(time.Second * 10)cancel()fmt.Println("task cancel success")
}func longTimeTask(ctx context.Context) {for {//fmt.Println("ok")select {case <-time.After(time.Second * 1):fmt.Println("task compete")case <-ctx.Done():fmt.Println("time out")return}}
}

1.3 context.WitchCancel(parentContext)

獲取一個可以中止的上下文,該方法會返回一個新的context,和cancel函數,調用cancel函數后,通過ctx.Done()方法可以獲取到上下文取消的通知

package mainimport ("context""fmt""time"
)func main() {parentCxt := context.Background()ctx, cancel := context.WithCancel(parentCxt)go longTimeTask(ctx)time.Sleep(time.Second * 10)cancel()fmt.Println("task cancel success")
}func longTimeTask(ctx context.Context) {for {//fmt.Println("ok")select {case <-time.After(time.Second * 1):fmt.Println("task compete")case <-ctx.Done():fmt.Println("time out")return}}
}

1.4 context.WithValue()

func WithValue(parent Context, key, val any) Context {
if parent == nil {
panic(“cannot create context from nil parent”)
}
if key == nil {
panic(“nil key”)
}
if !reflectlite.TypeOf(key).Comparable() {
panic(“key is not comparable”)
}
return &valueCtx{parent, key, val}
}
可以在上下文中存貯一些參數,通過上下文隨時獲取。

2.chan 信道

golang的chan和map,切片,接口,函數一樣是引用類型。
golang更加推薦使用chan去解決并發的協作的問題,對chan的讀寫是并發安全的,當然你也可也以使用sync.Mutex等包來控制并發。

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

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

相關文章

用爬山算法解決離散的優化問題

爬山算法&#xff0c;也稱為梯度上升算法或局部搜索算法&#xff0c;是一種簡單有效的優化算法&#xff0c;常用于解決連續或離散的優化問題。爬山算法的基本思想是從一個隨機的初始點開始&#xff0c;通過迭代地向局部最優的方向移動&#xff0c;逐步逼近全局最優解。 爬山算…

git管理Codeup云效平臺

HTTPS方式實現Git命令 1.進入項目路徑&#xff0c;如 cd demo&#xff0c;與此同時&#xff0c;在Codeup平臺創建一個空倉庫repo&#xff0c;獲取空倉庫的https協議地址&#xff0c;例如 https://codeup.aliyun.com/xxxx/xxxx/xxx.git。 2.在demo項目下執行 git init命令初始化…

從反向傳播(BP)到BPTT:詳細數學推導【原理理解】

從反向傳播到BPTT&#xff1a;詳細推導與問題解析 在本文中&#xff0c;我們將從反向傳播算法開始&#xff0c;詳細推導出反向傳播通過時間&#xff08;Backpropagation Through Time, BPTT&#xff09;算法。重點討論BPTT中的梯度消失和梯度爆炸問題&#xff0c;并解釋如何解…

采用LoRA方法微調llama3大語言模型

文章目錄 前言一、Llama3模型簡介1.下載llama3源碼到linux服務器2.安裝依賴3.測試預訓練模型Meta-Llama-3-8B4.測試指令微調模型Meta-Llama3-8B-Instruct5.小結 二、LoRA微調Llama31.引入庫2.編寫配置文件3.LoRA訓練的產物 三、測試新模型效果1.編寫配置文件2.運行配置文件&…

QT教程-一,初識QT

目錄 一,QT是什么&#xff1f;能夠使用它做什么&#xff1f; 二&#xff0c;Qt 能夠使用的語言 三&#xff0c;Qt主要用于什么領域&#xff1f; 四&#xff0c;Qt開發的軟件 一,QT是什么&#xff1f;能夠使用它做什么&#xff1f; Qt是一個跨平臺的 C 開發庫&#xff0c;主…

全球最高點贊記錄,世界點贊第一名是誰?世界點贊第一人名字的由來

世界點贊第一人名字的由來&#xff1a; 起源與概念提出&#xff1a; 二十一世紀東方偉大的思想家哲學家教育家顏廷利教授&#xff0c;一位在中國21世紀早期便以其非凡才華和創新精神著稱的學者&#xff0c;早在互聯網尚未普及的20世紀90年代&#xff0c;就已經提出了“點贊”的…

算法提高之最大數

算法提高之最大數 核心思想&#xff1a;線段樹 添加數 看作原本的數組有數(0) 現在將他修改成另一個值 詢問后l個數的最大值query函數具體實現 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 200010;typed…

python爬蟲登錄到海康相機管理頁面

簡述 1.最近接到個任務是在管理頁面更改相機的某個參數&#xff0c;下載官方的sdk貌似沒有提供這個接口&#xff0c;所以只能自己寫爬蟲登錄發請求了。 1.主要步驟 1.1 發送get請求獲取到salt&#xff0c;sessionID&#xff0c;challenge等信息 http://admin:123456192.168.…

交叉熵損失函數計算過程(tensorflow)

交叉熵損失函數通常用于多類分類損失函數計算。計算公式如下&#xff1a; P為真實值&#xff0c;Q為預測值。 使用tensorflow計算 import tensorflow as tf import keras# 創建一個示例數據集 # 假設有3個樣本&#xff0c;每個樣本有4個特征&#xff0c;共2個類別 # 目標標簽…

Spark Client 配置

前言 記錄Spark Client 配置,這里的 Spark Client 和 HDFS、YARN 不在一個節點,只是一個單節點的 Spark Client,需要能連接其他節點的大數據集群的 Hive 和 能提交到Yarn 。 環境信息 大數據節點(已配置好Spark): 192.168.44.154 192.168.44.155 192.168.44.156 客戶端…

P2P 技術:點對點網絡的興起

目錄 概述 P2P 的興起 P2P 的定義和特征 定義 特征 P2P 的發展 早期發展 快速成長 成熟應用 P2P 的關鍵技術 P2P 的應用 總結 概述 P2P&#xff08;Peer-to-Peer&#xff09;&#xff0c;即點對點網絡&#xff0c;是一種去中心化的網絡架構&#xff0c;它允許網絡中…

2024最新私有化部署AI大模型,讓每個人都有屬于自己的AI助理

讓每個人都擁有一個屬于自己的本地大模型 下載Ollama 下載地址 ? https://ollama.com/download ? Ollama支持MacOS、Linux、Windows 解壓 下載完成后&#xff0c;會得到一個Ollama-darwin.zip文件&#xff0c;解壓后&#xff0c;以Mac為例是一個可運行文件&#xff1a;O…

Jupyter 使用手冊: 探索交互式計算的無限可能

什么是 Jupyter? Jupyter 是一個開源的 Web 應用程序,可用于創建和共享包含實時代碼、可視化和敘述性文本的文檔。它最初是作為 IPython 項目的一部分開發的,后來發展成為支持多種編程語言的交互式計算環境。 應用場景 作為一個開源的交互式計算環境,Jupyter 在以下幾個領域…

AI應用案例:服務器智能分析管理系統

服務器硬件配置、性能狀態、所運行的應用系統等信息分散于多個不同的信息管理系統。人為查詢判斷現有的服務器資源是否滿足用戶需求&#xff0c;且需結合資產管理系統與Maximo基礎資源、性能監控、運維管理等各個系統互不關聯&#xff0c;數據分散不能為運維管理提供完整一致的…

在Spring 當中存在的八大模式

在Spring 當中存在的八大模式 文章目錄 在Spring 當中存在的八大模式每博一文案1. 簡單工廠模式2. 工廠方法模式3. 單例模式4. 代理模式5. 裝飾器模式6. 觀察者模式7. 策略模式8. 模板方法模式最后&#xff1a; 每博一文案 我認為 “知世故而不世故” 才是真正意義上的成熟。回…

Micrometer中0.5 0.9 0.99三個百分位數詳解

Micrometer的Timer類中的publishPercentiles方法使用0.5, 0.95, 0.99這三個百分位數&#xff0c;是因為它們在性能監控和SLA&#xff08;Service Level Agreement&#xff0c;服務等級協議&#xff09;指標測量中具有特定的意義和普遍應用。 在系統性能監控領域&#xff0c;這…

【PPT密碼】PPT文件的兩種不可編輯情況

不知道大家有沒有遇到過&#xff0c;PPT文件無法編輯的情況&#xff0c;今天小編分享兩種ppt文件不可編輯的原因以及解決方法。 情況一 如果打開ppt文件之后&#xff0c;發現幻燈片某些地方或者每張幻燈片同一個地方&#xff0c;無法編輯&#xff0c;這可能是因為PPT中設置了…

Scala學習筆記6: 類

目錄 第六章 類1- 簡單類和無參方法2- 帶有getter和setter的屬性3- 只帶getter的屬性4- 對象私有化5- 輔助構造器6- 主構造器7- 嵌套類end 第六章 類 在Scala中, 類用于創建對象的藍圖; 類可以包含方法、值、變量、類型、對象和特質等成員; 類名應該以大寫字母開頭, 可以包含…

ISCC 2024 部分wp

文章目錄 一、Misc1、Number_is_the_key2、FunZip3、擂臺—— 重“隱”&#xff1b;4、RSA_KU5、時間刺客6、成語學習7、 精裝四合一8、鋼鐵俠在解密9、有人讓我給你帶個話10、Magic_Keyboard11、工業互聯網模擬仿真數據分析 二、Web1、還沒想好名字的塔防游戲2、代碼審計3、原…

又一個換臉工具-swapface

網址 https://www.swapface.org/ 看官網支持windows和mac m1,我下載了但是我沒安裝&#xff0c;因為我的硬盤真的遭不住了。 可以去別的地方搜搜介紹&#xff0c;聽說使用挺簡單的。 但是我感覺還是rope比較好&#xff0c;其實rope已經很快了&#xff0c;就是沒有gpu有點坑…