日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Golang不可不知的七個并發概念

來源: 責編: 時間:2023-11-13 17:17:56 319觀看
導讀并發是Go編程語言的基本特性,意味著程序可以同時執行多個任務。Golang的并發獨特而強大,其內置的輕量級協程(goroutine)和通道(channel)支持創建可伸縮、安全、高性能的高并發系統。本文將探索Go中和并發性有關的七個有

并發是Go編程語言的基本特性,意味著程序可以同時執行多個任務。Golang的并發獨特而強大,其內置的輕量級協程(goroutine)和通道(channel)支持創建可伸縮、安全、高性能的高并發系統。UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

本文將探索Go中和并發性有關的七個有趣事實,并提供示例。UJa28資訊網——每日最新資訊28at.com

1. 協程(Goroutines)

Goroutine是Go編程語言的特性之一,這是輕量級線程,與同一地址空間中的其他goroutine并發運行。它的創建成本非常低,Go運行時可以同時處理數千個goroutine。Goroutine使編寫高并發程序變得容易,這些程序可以根據需要伸縮。UJa28資訊網——每日最新資訊28at.com

下面是一個創建goroutine的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

在本例中,定義了printMessage函數,該函數接受一個消息字符串以及打印消息的次數,其中sleep語句用來模擬在每次消息打印之間完成的一些額外工作。UJa28資訊網——每日最新資訊28at.com

在main函數中,調用go printMessage("Hello", 5)和go printMessage("world", 5)來啟動兩個goroutine。這創建了兩個與主線程并發運行的獨立執行線程。time.Sleep(1 * time.Second)語句用于將主線程暫停一秒鐘,這給了兩個goroutine足夠的時間來執行和打印消息。UJa28資訊網——每日最新資訊28at.com

2. 通道(Channels)

Channel是Go的另一個基本特性,支持在程序之間進行通信和同步。Channel是一種有類型管道,可以使用<-操作符發送和接收。Channel確保了并發進程之間安全有效的通信。UJa28資訊網——每日最新資訊28at.com

下面是一個使用channel的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

在本例中,make函數創建了一個string類型的channel。然后,我們創建一個使用<-操作符向channel發送消息"Hello from channel!"的goroutine。最后,我們使用<-操作符從channel接收消息并將其打印到控制臺。UJa28資訊網——每日最新資訊28at.com

3. 緩沖通道(Buffered Channels)

緩沖通道是在讀取之前可以保存一定數量的值的通道,對于管理并發系統中的突發流量非常有用。使用make函數可以創建緩沖通道,通過第二個參數指定緩沖區大小。UJa28資訊網——每日最新資訊28at.com

下面是一個使用緩沖通道的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

在本例中,我們創建了一個緩沖區大小為2的int類型的緩沖通道。然后使用<-操作符向通道發送兩個值(1和2)。最后,我們使用<-操作符從通道接收值,并打印到控制臺。UJa28資訊網——每日最新資訊28at.com

4. Select語句

Go中的select語句允許我們同時等待多個通道操作。這是個強大的結構,可以幫助我們編排復雜的并發系統。select語句會阻塞直到其中一個case可以繼續進行,此時就執行該case。UJa28資訊網——每日最新資訊28at.com

下面是一個使用select語句的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

本例中創建了兩個通道(ch1和ch2)和兩個向這些通道發送消息的goroutine。然后,我們使用select語句等待消息到達ch1或ch2。當消息到達時,將其打印到控制臺。UJa28資訊網——每日最新資訊28at.com

5. Mutex

Go中的互斥鎖(sync.Mutex)提供了一種簡單有效的方法來保護共享資源免受并發訪問。mutex是一種互斥鎖,一次只允許一個程序訪問資源,任何其他試圖在資源被鎖定時訪問該資源的goroutine都將被阻塞,直到鎖被釋放。UJa28資訊網——每日最新資訊28at.com

下面是一個使用互斥鎖的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

在這個例子中,我們定義了一個Counter類型,包含count字段和一個sync.Mutex。在Counter類型上定義了兩個方法: Increment()和Count()。這兩種方法都使用互斥鎖來確保一次只有一個goroutine可以訪問count字段。最后,我們創建1000個增加count字段的goroutine,在打印最終計數之前等待它們全部完成。UJa28資訊網——每日最新資訊28at.com

6. WaitGroup

Go中的sync.WaitGroup類型提供了一種同步多個goroutine的簡單方法。WaitGroup在繼續之前等待一組goroutine完成,是協調多個goroutine執行的有力工具,可以幫助我們確保在進入程序的下一步之前,所有goroutine都已完成。UJa28資訊網——每日最新資訊28at.com

下面是一個使用WaitGroup的例子:UJa28資訊網——每日最新資訊28at.com

UJa28資訊網——每日最新資訊28at.com

在本例中,我們創建了一個WaitGroup和10個goroutine。每個goroutine休眠數秒,然后向控制臺打印一條消息。我們使用WaitGroup來確保在打印最終消息之前所有的goroutine都已經完成。UJa28資訊網——每日最新資訊28at.com

7. Context

Go中的context包提供了一種跨API邊界和進程之間攜帶截止日期、取消信號和其他請求作用域值的方法,是在并發系統中管理資源的強大工具,可以幫助我們避免常見問題(如goroutine泄漏)。UJa28資訊網——每日最新資訊28at.com

下面是一個使用context的例子:UJa28資訊網——每日最新資訊28at.com

func worker(ctx Context.context, wg *sync.WaitGroup) {  defer wg.Done()  for {    select {    case <- ctx.Done():      fmt.Println("Worker received cancel signal")      return    default:      fmt.Println("Worker is working...")      time.Sleep(1 * time.Second)    }  }}func main() {  ctx, cancel := context.WithCancel()  var wg sync.WaitGroup  wg.Add(1)  go worker(ctx, &wg)  time.Sleep(5 * time.Second)  cancel()  wg.Wait()  fmt.Println("All workers stopped")}

在這個例子中,我們定義了一個接受context.Context和sync.WaitGroup作為參數的worker函數。worker函數用select語句等待來自context的cancel信號或者在default中執行某些工作。我們還定義了一個main函數,該函數用context.WithCancel創建上下文,并啟動worker goroutine。等待5秒后cancel context,它會向worker goroutine發送cancel信號,讓它停止工作。在打印最終消息之前,我們用WaitGroup來等待worker goroutine結束。UJa28資訊網——每日最新資訊28at.com

結論

總的來說,并發性是Go中的一個重要主題,并且該語言為處理并發系統提供了一組強大的工具。無論是構建web服務器、分布式系統還是簡單的命令行工具,了解Go的并發性對于構建健壯、可擴展、高效的程序都必不可少。UJa28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-23612-0.htmlGolang不可不知的七個并發概念

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: DDD領域驅動設計:為什么公司需要這種方法,誰使用它,它的本質是什么?

下一篇: 一起學Elasticsearch系列-Query DSL

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現在已經可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top 主站蜘蛛池模板: 乌拉特前旗| 田阳县| 门头沟区| 琼中| 尉犁县| 蒙自县| 汕尾市| 汤阴县| 阳泉市| 新郑市| 和顺县| 青海省| 颍上县| 芦山县| 贵南县| 海伦市| 象州县| 攀枝花市| 嘉峪关市| 正蓝旗| 赞皇县| 望都县| 万荣县| 武清区| 新疆| 当阳市| 鹰潭市| 延川县| 东城区| 西乌| 巩留县| 施秉县| 高唐县| 新沂市| 南投市| 万年县| 油尖旺区| 新泰市| 马尔康县| 杭锦后旗| 重庆市|