亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定代碼的執行流程將如何?go 例程在這里將如何執行?

給定代碼的執行流程將如何?go 例程在這里將如何執行?

Go
慕尼黑8549860 2023-07-31 16:56:44
(并發編程新手)有疑問為什么 goroutine 的執行流程在這里有點奇怪?golang 中 goroutine 和通道的初學者。func main() {    // Set up the pipeline.    c := gen(2, 3)    out := sq(c)    // Consume the output.    fmt.Println(<-out) // 4    fmt.Println(<-out) // 9}func sq(in <-chan int) <-chan int {    out := make(chan int)    go func() {        for n := range in {            out <- n * n        }        close(out)    }()    return out}func gen(nums ...int) <-chan int {    out := make(chan int)    go func() {        for _, n := range nums {            out <- n        }        close(out)    }()    return out}
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

一旦調用gensq完成,就會有 3 個 goroutine 同時運行。它們在通道之間傳遞數據,因此執行會產生相同的結果。

  1. 根內

  2. 內方

  3. 主要的

他們總是傳遞至少 2 條信息,因此按以下順序運行代碼

  1. gen-inner out <- n-2-> sq-inner out <- n * n-4-> mainprintln(<-out)

  2. gen-inner out <- n-3-> sq-inner out <- n * n-9-> mainprintln(<-out)

還可能發生第三遍,但它可能會在maingoroutine 結束時被跳過。

  1. gen-inner close()-close-> sq-inner close(out)-close->


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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