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

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

Go并發可視化解釋:sync.WaitGroup

來源: 責編: 時間:2023-10-23 17:05:57 339觀看
導讀場景Avito是一名校車司機,他幫助4個Gopher孩子上學。每天,Avito在他們的社區等待孩子們。他不知道孩子們需要多長時間,但他確切地知道有4個孩子他需要等待。1*aZnEggopv4Tsbyyj3e5JFg.png當一個孩子準備好時,他/她會說:Don

場景

Avito是一名校車司機,他幫助4個Gopher孩子上學。每天,Avito在他們的社區等待孩子們。他不知道孩子們需要多長時間,但他確切地知道有4個孩子他需要等待。KZN28資訊網——每日最新資訊28at.com

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

1*aZnEggopv4Tsbyyj3e5JFg.pngKZN28資訊網——每日最新資訊28at.com

當一個孩子準備好時,他/她會說:Done(),將計數器減1。Avito仍然被阻塞,因為計數器仍然大于0。他必須等到所有其他孩子準備好。KZN28資訊網——每日最新資訊28at.com

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

1*qouGWmMAqY2CDrzz5widhQ.pngKZN28資訊網——每日最新資訊28at.com

如果有兩個孩子同時準備好,它們的同時準備會導致WaitGroup出現不一致嗎?絕對不會。與sync包中的大多數其他組件一樣,WaitGroup具有內置的同步機制,以處理并發。因此,計數器減少了準備好的孩子數量。KZN28資訊網——每日最新資訊28at.com

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

1*057bX4zo_LCzEkdzGyDYpA.pngKZN28資訊網——每日最新資訊28at.com

在最后一個孩子準備好后,Avito啟動引擎,將他們送到學校。KZN28資訊網——每日最新資訊28at.com

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

1*rjH8OR3t7QgUx-dO-Iszeg.pngKZN28資訊網——每日最新資訊28at.com

就是這樣!正如我所說,sync.WaitGroup很簡單。KZN28資訊網——每日最新資訊28at.com

超時

如果一個孩子花費太多時間準備,他們會不會因此遲到?如果Avito在時間到達時不管怎樣都開始行駛會更好嗎?嗯,Golang傾向于保持一切盡可能簡潔,因此與其他編程語言中的CountDownLatch(例如Java中的)不同,sync.WaitGroup默認情況下不支持超時。在這種情況下,選擇語句可能會有所幫助。KZN28資訊網——每日最新資訊28at.com

func main() {    wg := sync.WaitGroup{}    wg.Add(1)    go func() {        defer wg.Done()        time.Sleep(5 * time.Second)    }()    done := make(chan bool)    go func() {        wg.Wait()        close(done)    }()    select {    case <-done:        log.Println("All done")    case <-time.After(1 * time.Second):        log.Println("Hit timeout")    }}

孩子等待

在上面的示例中,Avito(主Goroutine)等待孩子(子Goroutines)。當我們希望子Goroutines等待主Goroutine時,WaitGroup也可以使用。想象一下孩子們正在進行體育課。Torcher - 體育老師,在學生中主持比賽。他向WaitGroup中Add(1),并要求所有孩子在相同的WaitGroup上Wait()。KZN28資訊網——每日最新資訊28at.com

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

1*btDQK4QKsu1HkEpfJDa2EA.pngKZN28資訊網——每日最新資訊28at.com

當Torcher調用wg.Done()時,計數器變為0,允許所有孩子同時開始奔跑。KZN28資訊網——每日最新資訊28at.com

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

1*VkV3VlRTx5jxXhauBH0_Dg.pngKZN28資訊網——每日最新資訊28at.com

展示你的代碼!

package mainimport (    "log"    "sync"    "time")func main() {    kids := []string{"Partier", "Stringer", "Candier", "Swimmer"}    wg := sync.WaitGroup{}    wg.Add(len(kids))    for _, kid := range kids {        go func(name string) {            defer wg.Done()            prepare(name)        }(kid)    }    log.Printf("Avito: I'm waiting for %d kids/n", len(kids))    wg.Wait()    log.Println("Avito: The kids are all ready, go!")}func prepare(name string) {    log.Printf("%v: I'm preparing for school/n", name)    time.Sleep(2 * time.Second)    log.Printf("%v: I'm ready/n", name)}

本文鏈接:http://www.www897cc.com/showinfo-26-14622-0.htmlGo并發可視化解釋:sync.WaitGroup

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

上一篇: ELK Stack生產實踐——pod日志采集(Elastic Agent方案)

下一篇: 2023 年 WebAssembly 現狀:第四種 Web 語言

標簽:
  • 熱門焦點
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發布

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • 三星Galaxy Z Fold5今日亮相:厚度縮減但仍略顯厚重

    據官方此前宣布,三星將于7月26日也就是今天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
Top 主站蜘蛛池模板: 富源县| 宣化县| 澎湖县| 康马县| 红原县| 祁连县| 杭州市| 安西县| 酒泉市| 资溪县| 周至县| 秦皇岛市| 军事| 禹州市| 大名县| 宜兰市| 江孜县| 正蓝旗| 吴江市| 松滋市| 德清县| 布拖县| 西充县| 朔州市| 新蔡县| 浦城县| 大竹县| 军事| 噶尔县| 桂东县| 黔江区| 乌兰浩特市| 深水埗区| 吉木乃县| 茶陵县| 淮阳县| 剑川县| 昭通市| 秀山| 银川市| 顺义区|