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

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

我不明白為什么這適用于無緩沖通道,或者為什么需要等待組

我不明白為什么這適用于無緩沖通道,或者為什么需要等待組

Go
幕布斯7119047 2022-12-13 16:02:01
在這段代碼中,我調用了一個函數(shù)來計算字符串中字母的數(shù)量,并返回一個符文圖。為了利用并發(fā)性,我使用 goroutines 調用該函數(shù):func ConcurrentFrequency(l []string) FreqMap {    var wg sync.WaitGroup    wg.Add(len(l))    m := FreqMap{}    // Using unbuffered channel    // ch := make(chan FreqMap, len(l))    ch := make(chan FreqMap)    for _, s := range l {        go func(s string, ch chan<- FreqMap) {            defer wg.Done()            ch <- Frequency(s)        }(s, ch)    }    go func() {        wg.Wait()        close(ch)    }()    for cm := range ch {        for r, n := range cm {            m[r] += n        }    }    return m}如果我在不使用等待組和關閉通道的 goroutine 的情況下嘗試此代碼:    go func() {        wg.Wait()        close(ch)    }(),然后我陷入僵局。我不明白的是,為什么我能夠遍歷無緩沖通道,并從中讀取多個地圖。這是完整的程序: https ://go.dev/play/p/zUwr_HvTT5w并發(fā)方法僅比順序方法快:goos: linuxgoarch: amd64pkg: lettercpu: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHzBenchmarkSequentialFrequencyBenchmarkSequentialFrequency-2              2820            367128 ns/op           17571 B/op         13 allocs/opBenchmarkConcurrentFrequencyBenchmarkConcurrentFrequency-2              4237            282632 ns/op           12682 B/op         72 allocs/opPASSok      letter  3.320s
查看完整描述

1 回答

?
jeck貓

TA貢獻1909條經(jīng)驗 獲得超7個贊

道上的 for-range 循環(huán)會一直持續(xù)到通道關閉為止。

如果刪除最終關閉通道的 goroutine,則 for 循環(huán)永遠不會終止。一旦所有的 goroutines 發(fā)送值都完成了,就只剩下一個 goroutine 并且它被永遠阻塞,等待通道關閉。

緩沖通道與此問題無關。他們只幫助處理被阻止的發(fā)件人,但這里的問題是被阻止的接收者。


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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