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

為了賬號安全,請及時綁定郵箱和手機立即綁定

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

凰凰 架構師
難度初級
時長 1小時58分
學習人數
綜合評分8.33
8人評價 查看評價
8.5 內容實用
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
    ???//?食材數量
    ???count?byte
    ???//?A車處理所需花費時間,單位秒
    ???elapsedTimeA?uint
    ???//?B車處理所需花費時間,單位秒
    ???elapsedTimeB?uint
    ???//?C車處理所需花費時間,單位秒
    ???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("總耗時:%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],數量[%d],預計耗時[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeA)
    ????????????//?睡眠模擬處理食材耗時
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeA))
    ????????????worker.Done()
    ?????????}(i,?ele)
    ??????}
    ??????//?等待所有工人都處理完畢后,把處理后的食材傳送給B車
    ??????worker.Wait()
    ??????fmt.Printf("A車食材[%s]正在運往B車\n",?ele.name)
    ??????ch1?<-?ele
    ???}
    ???fmt.Printf("A車任務結束\n")
    ???global.Done()
    }
    
    func?B()?{
    ???fmt.Printf("B車出發(fā)\n")
    ???//?循環(huán)處理3種食材
    ???for?i?:=?0;?i?<?3;?i++?{
    ??????//?從通道取不到數據時會阻塞,只有通道關閉時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],數量[%d],預計耗時[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeB)
    ????????????//?睡眠模擬處理食材耗時
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeB))
    ????????????worker.Done()
    ?????????}(j,?ele)
    ??????}
    ??????//?等待所有工人都處理完畢后,把處理后的食材傳送給C車
    ??????worker.Wait()
    ??????fmt.Printf("B車食材[%s]正在運往C車\n",?ele.name)
    ??????ch2?<-?ele
    ???}
    ???fmt.Printf("B車任務結束\n")
    ???global.Done()
    }
    
    func?C()?{
    ???fmt.Printf("C車出發(fā)\n")
    ???for?i?:=?0;?i?<?3;?i++?{
    ??????//?從通道取不到數據時會阻塞,只有通道關閉時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],數量[%d],預計耗時[%d]秒\n",?index,?ele2.name,?ele2.count/3,?ele2.elapsedTimeC)
    ????????????//?睡眠模擬處理食材耗時
    ????????????time.Sleep(time.Second?*?time.Duration(ele2.elapsedTimeC))
    ????????????worker.Done()
    ?????????}(j,?ele)
    ??????}
    ??????worker.Wait()
    ???}
    ???fmt.Printf("C車任務結束\n")
    ???global.Done()
    }
    查看全部
  • 終端,pid,IDE
    查看全部
  • context實現goroutine中斷
    查看全部
  • 可能習慣了直接聽干貨知識,講做菜雖然很生動,但是聽起來總感覺別扭。
    查看全部
  • 總結總結總結

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

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

    查看全部
  • 面試題之梳理

    查看全部
  • 面試題之考點

    查看全部
  • 實操案例:生產者和消費者

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

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

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

    查看全部
  • Channe 阻塞條件

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

舉報

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

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!