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

當(dāng)前位置:首頁 > 科技  > 軟件

Golang不可不知的七個并發(fā)概念

來源: 責(zé)編: 時間:2023-11-13 17:17:56 280觀看
導(dǎo)讀并發(fā)是Go編程語言的基本特性,意味著程序可以同時執(zhí)行多個任務(wù)。Golang的并發(fā)獨(dú)特而強(qiáng)大,其內(nèi)置的輕量級協(xié)程(goroutine)和通道(channel)支持創(chuàng)建可伸縮、安全、高性能的高并發(fā)系統(tǒng)。本文將探索Go中和并發(fā)性有關(guān)的七個有

并發(fā)是Go編程語言的基本特性,意味著程序可以同時執(zhí)行多個任務(wù)。Golang的并發(fā)獨(dú)特而強(qiáng)大,其內(nèi)置的輕量級協(xié)程(goroutine)和通道(channel)支持創(chuàng)建可伸縮、安全、高性能的高并發(fā)系統(tǒng)。iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

本文將探索Go中和并發(fā)性有關(guān)的七個有趣事實(shí),并提供示例。iYj28資訊網(wǎng)——每日最新資訊28at.com

1. 協(xié)程(Goroutines)

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

下面是一個創(chuàng)建goroutine的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

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

在main函數(shù)中,調(diào)用go printMessage("Hello", 5)和go printMessage("world", 5)來啟動兩個goroutine。這創(chuàng)建了兩個與主線程并發(fā)運(yùn)行的獨(dú)立執(zhí)行線程。time.Sleep(1 * time.Second)語句用于將主線程暫停一秒鐘,這給了兩個goroutine足夠的時間來執(zhí)行和打印消息。iYj28資訊網(wǎng)——每日最新資訊28at.com

2. 通道(Channels)

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

下面是一個使用channel的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

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

3. 緩沖通道(Buffered Channels)

緩沖通道是在讀取之前可以保存一定數(shù)量的值的通道,對于管理并發(fā)系統(tǒng)中的突發(fā)流量非常有用。使用make函數(shù)可以創(chuàng)建緩沖通道,通過第二個參數(shù)指定緩沖區(qū)大小。iYj28資訊網(wǎng)——每日最新資訊28at.com

下面是一個使用緩沖通道的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

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

4. Select語句

Go中的select語句允許我們同時等待多個通道操作。這是個強(qiáng)大的結(jié)構(gòu),可以幫助我們編排復(fù)雜的并發(fā)系統(tǒng)。select語句會阻塞直到其中一個case可以繼續(xù)進(jìn)行,此時就執(zhí)行該case。iYj28資訊網(wǎng)——每日最新資訊28at.com

下面是一個使用select語句的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

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

5. Mutex

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

下面是一個使用互斥鎖的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

在這個例子中,我們定義了一個Counter類型,包含count字段和一個sync.Mutex。在Counter類型上定義了兩個方法: Increment()和Count()。這兩種方法都使用互斥鎖來確保一次只有一個goroutine可以訪問count字段。最后,我們創(chuàng)建1000個增加count字段的goroutine,在打印最終計數(shù)之前等待它們?nèi)客瓿伞?span style="display:none">iYj28資訊網(wǎng)——每日最新資訊28at.com

6. WaitGroup

Go中的sync.WaitGroup類型提供了一種同步多個goroutine的簡單方法。WaitGroup在繼續(xù)之前等待一組goroutine完成,是協(xié)調(diào)多個goroutine執(zhí)行的有力工具,可以幫助我們確保在進(jìn)入程序的下一步之前,所有g(shù)oroutine都已完成。iYj28資訊網(wǎng)——每日最新資訊28at.com

下面是一個使用WaitGroup的例子:iYj28資訊網(wǎng)——每日最新資訊28at.com

iYj28資訊網(wǎng)——每日最新資訊28at.com

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

7. Context

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

下面是一個使用context的例子:iYj28資訊網(wǎng)——每日最新資訊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作為參數(shù)的worker函數(shù)。worker函數(shù)用select語句等待來自context的cancel信號或者在default中執(zhí)行某些工作。我們還定義了一個main函數(shù),該函數(shù)用context.WithCancel創(chuàng)建上下文,并啟動worker goroutine。等待5秒后cancel context,它會向worker goroutine發(fā)送cancel信號,讓它停止工作。在打印最終消息之前,我們用WaitGroup來等待worker goroutine結(jié)束。iYj28資訊網(wǎng)——每日最新資訊28at.com

結(jié)論

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

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

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

上一篇: DDD領(lǐng)域驅(qū)動設(shè)計:為什么公司需要這種方法,誰使用它,它的本質(zhì)是什么?

下一篇: 一起學(xué)Elasticsearch系列-Query DSL

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)好評榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機(jī)好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進(jìn)行反混淆,尤其是使用自定義混淆器對其進(jìn)行混淆時。什么是混
  • 微軟邀請 Microsoft 365 商業(yè)用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業(yè)用戶,開放 Clipchamp 應(yīng)用,邀請用戶通過該應(yīng)用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關(guān)鍵的當(dāng)屬對企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報告。ESG是&ldquo;環(huán)境保
  • 小米MIX Fold 3配置細(xì)節(jié)曝光:搭載領(lǐng)先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業(yè)從業(yè)者、長三角一體化擁護(hù)者”的微博用戶 @長三角行健者 發(fā)文表示,據(jù)經(jīng)銷商集團(tuán)反饋,小米汽車目前
  • Android 14發(fā)布:首批適配機(jī)型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發(fā)布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機(jī),同時發(fā)布了Androi
Top 主站蜘蛛池模板: 响水县| 齐齐哈尔市| 宜都市| 平舆县| 南皮县| 磴口县| 安岳县| 紫云| 凤阳县| 抚松县| 宣威市| 沙坪坝区| 长治市| 荣昌县| 武定县| 玉田县| 常宁市| 红原县| 都兰县| 方正县| 临沭县| 道孚县| 株洲市| 凤山市| 镶黄旗| 顺平县| 乐亭县| 湟源县| 天水市| 湘西| 曲麻莱县| 扶沟县| 咸宁市| 唐河县| 周宁县| 辽阳县| 邢台市| 泰来县| 图木舒克市| 奉节县| 库尔勒市|