第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Go并發(fā)之魂:Goroutine深入淺出【程序人生中的“米其林三星級”并發(fā)實(shí)戰(zhàn)】

凰凰 架構(gòu)師
難度初級
時(shí)長 1小時(shí)58分
學(xué)習(xí)人數(shù)
綜合評分8.33
8人評價(jià) 查看評價(jià)
8.5 內(nèi)容實(shí)用
8.5 簡潔易懂
8.0 邏輯清晰
  • fork and join

    查看全部
  • package?main
    
    import?(
    ???"fmt"
    ???"sync"
    ???"time"
    )
    
    var?global?=?sync.WaitGroup{}
    
    //?A車傳送給B車的通道
    var?ch1?=?make(chan?*material,?3)
    
    //?B車傳送給C車的通道
    var?ch2?=?make(chan?*material,?3)
    
    //?食材
    type?material?struct?{
    ???//?食材名稱
    ???name?string
    ???//?食材數(shù)量
    ???count?byte
    ???//?A車處理所需花費(fèi)時(shí)間,單位秒
    ???elapsedTimeA?uint
    ???//?B車處理所需花費(fèi)時(shí)間,單位秒
    ???elapsedTimeB?uint
    ???//?C車處理所需花費(fèi)時(shí)間,單位秒
    ???elapsedTimeC?uint
    }
    
    func?main()?{
    ???global.Add(3)
    ???//?所有需要處理的食材
    ???materials?:=?[]*material{
    ??????{"白菜",?12,?2,?1,?1},
    ??????{"青菜",?12,?1,?1,?1},
    ??????{"胡蘿卜",?12,?1,?1,?1},
    ???}
    ???start?:=?time.Now()
    ???go?A(materials)
    ???go?B()
    ???go?C()
    ???global.Wait()
    ???cost?:=?time.Since(start)
    ???fmt.Printf("總耗時(shí):%s\n",?cost)
    }
    func?A(materials?[]*material)?{
    ???fmt.Printf("A車出發(fā)\n")
    ???//?循環(huán)處理每種食材
    ???for?_,?ele?:=?range?materials?{
    ??????var?worker?=?sync.WaitGroup{}
    ??????worker.Add(3)
    ??????//?3名工人分別處理每種食材的1/3
    ??????for?i?:=?0;?i?<?3;?i++?{
    ?????????go?func(index?int,?ele2?*material)?{
    ????????????fmt.Printf("A車工人[%d]正在清洗食材[%s],數(shù)量[%d],預(yù)計(jì)耗時(shí)[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeA)
    ????????????//?睡眠模擬處理食材耗時(shí)
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeA))
    ????????????worker.Done()
    ?????????}(i,?ele)
    ??????}
    ??????//?等待所有工人都處理完畢后,把處理后的食材傳送給B車
    ??????worker.Wait()
    ??????fmt.Printf("A車食材[%s]正在運(yùn)往B車\n",?ele.name)
    ??????ch1?<-?ele
    ???}
    ???fmt.Printf("A車任務(wù)結(jié)束\n")
    ???global.Done()
    }
    
    func?B()?{
    ???fmt.Printf("B車出發(fā)\n")
    ???//?循環(huán)處理3種食材
    ???for?i?:=?0;?i?<?3;?i++?{
    ??????//?從通道取不到數(shù)據(jù)時(shí)會阻塞,只有通道關(guān)閉時(shí)ok才等于false,所以下面的if判斷可以忽略
    ??????ele,?ok?:=?<-ch1
    ??????if?!ok?{
    ?????????break
    ??????}
    ??????fmt.Printf("B車接收到A車食材[%s]\n",?ele.name)
    ??????var?worker?=?sync.WaitGroup{}
    ??????worker.Add(3)
    ??????for?j?:=?0;?j?<?3;?j++?{
    ?????????go?func(index?int,?ele2?*material)?{
    ????????????fmt.Printf("B車工人[%d]正在加工食材[%s],數(shù)量[%d],預(yù)計(jì)耗時(shí)[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeB)
    ????????????//?睡眠模擬處理食材耗時(shí)
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeB))
    ????????????worker.Done()
    ?????????}(j,?ele)
    ??????}
    ??????//?等待所有工人都處理完畢后,把處理后的食材傳送給C車
    ??????worker.Wait()
    ??????fmt.Printf("B車食材[%s]正在運(yùn)往C車\n",?ele.name)
    ??????ch2?<-?ele
    ???}
    ???fmt.Printf("B車任務(wù)結(jié)束\n")
    ???global.Done()
    }
    
    func?C()?{
    ???fmt.Printf("C車出發(fā)\n")
    ???for?i?:=?0;?i?<?3;?i++?{
    ??????//?從通道取不到數(shù)據(jù)時(shí)會阻塞,只有通道關(guān)閉時(shí)ok才等于false,所以下面的if判斷可以忽略
    ??????ele,?ok?:=?<-ch2
    ??????if?!ok?{
    ?????????break
    ??????}
    ??????fmt.Printf("C車接收到B車食材[%s]\n",?ele.name)
    ??????var?worker?=?sync.WaitGroup{}
    ??????worker.Add(3)
    ??????for?j?:=?0;?j?<?3;?j++?{
    ?????????go?func(index?int,?ele2?*material)?{
    ????????????fmt.Printf("C車工人[%d]正在裝載食材[%s],數(shù)量[%d],預(yù)計(jì)耗時(shí)[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeC)
    ????????????//?睡眠模擬處理食材耗時(shí)
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeC))
    ????????????worker.Done()
    ?????????}(j,?ele)
    ??????}
    ??????worker.Wait()
    ???}
    ???fmt.Printf("C車任務(wù)結(jié)束\n")
    ???global.Done()
    }
    查看全部
  • 終端,pid,IDE
    查看全部
  • context實(shí)現(xiàn)goroutine中斷
    查看全部
  • 可能習(xí)慣了直接聽干貨知識,講做菜雖然很生動,但是聽起來總感覺別扭。
    查看全部
  • 總結(jié)總結(jié)總結(jié)

    查看全部
  • 面試題之白板寫代碼

    查看全部
  • 面試題之解題邏梳理

    查看全部
  • 面試題之梳理

    查看全部
  • 面試題之考點(diǎn)

    查看全部
  • 實(shí)操案例:生產(chǎn)者和消費(fèi)者

    查看全部
  • 如何利用 channel 阻塞

    查看全部
  • 企業(yè)級解決辦法

    查看全部
  • Channel 阻塞的重后果

    查看全部
  • Channe 阻塞條件

    查看全部
首頁上一頁123下一頁尾頁

舉報(bào)

0/150
提交
取消
課程須知
1、學(xué)前掌握基本的Go語法基礎(chǔ)
老師告訴你能學(xué)到什么?
1. multi-goroutine核心機(jī)理、使用場景、局限性、如何管理 2. 協(xié)程生命周期、多并發(fā)通用設(shè)計(jì)+實(shí)戰(zhàn) 3. channel使用、資源爭搶 4. channel阻塞:概念+觸發(fā)條件+實(shí)際開發(fā)場景+避免方法 5. goroutine高頻面試題+面試思路點(diǎn)撥 6. 如何白板寫goroutine并發(fā)面試代碼與注意事項(xiàng)

微信掃碼,參與3人拼團(tuán)

微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!