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

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

為什么在這個函數(shù)中使用通道?

為什么在這個函數(shù)中使用通道?

Go
青春有我 2023-07-31 17:34:01
我正在研究一篇關(guān)于使用 go-routines 的時機的博客,我看到了下面粘貼的示例,從第 61 行到第 65 行。但我不明白這里使用通道的目的。看來他正在迭代通道以檢索 go-routine 內(nèi)的消息。但為什么不直接使用字符串數(shù)組呢?58 func findConcurrent(goroutines int, topic string, docs []string) int {59? ? ?var found int646061? ? ?ch := make(chan string, len(docs))62? ? ?for _, doc := range docs {63? ? ? ? ?ch <- doc64? ? ?}65? ? ?close(ch)6667? ? ?var wg sync.WaitGroup68? ? ?wg.Add(goroutines)6970? ? ?for g := 0; g < goroutines; g++ {71? ? ? ? ?go func() {72? ? ? ? ? ? ?var lFound int6473? ? ? ? ? ? ?for doc := range ch {74? ? ? ? ? ? ? ? ?items, err := read(doc)75? ? ? ? ? ? ? ? ?if err != nil {76? ? ? ? ? ? ? ? ? ? ?continue77? ? ? ? ? ? ? ? ?}78? ? ? ? ? ? ? ? ?for _, item := range items {79? ? ? ? ? ? ? ? ? ? ?if strings.Contains(item.Description, topic) {80? ? ? ? ? ? ? ? ? ? ? ? ?lFound++81? ? ? ? ? ? ? ? ? ? ?}82? ? ? ? ? ? ? ? ?}83? ? ? ? ? ? ?}84? ? ? ? ? ? ?atomic.AddInt64(&found, lFound)85? ? ? ? ? ? ?wg.Done()86? ? ? ? ?}()87? ? ?}8889? ? ?wg.Wait()9091? ? ?return int(found)92 }
查看完整描述

3 回答

?
米脂

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

此代碼提供了在多個 goRoutines 之間分配工作(在文檔中查找字符串)的示例?;旧希a是啟動goroutines并向他們提供文檔以通過通道進行搜索。


但為什么不直接使用字符串數(shù)組呢?


可以使用字符串數(shù)組和變量(我們稱之為count)來跟蹤您正在處理的數(shù)組中的項目。你會有一些類似的代碼(有點啰嗦來演示一點):


for {

   if count > len(docarray) {

      break;

   }

   doc := docarray[count]

   count++

   // Process the document

}

但是您會遇到同步問題。例如,如果兩個 go 例程(在不同的處理器內(nèi)核上運行)if count > len(docarray)同時到達會發(fā)生什么?如果沒有什么措施來阻止這種情況,它們可能最終都會處理切片中的相同項目(并且可能會跳過下一個元素,因為它們都運行count++)。


進程同步很復雜,而且問題很難調(diào)試。使用通道可以讓您隱藏很多復雜性,并使您的代碼更有可能按預期工作(它并不能解決所有問題;請注意在atomic.AddInt64(&found, lFound)示例代碼中使用 來防止多個 go 例程導致的另一個潛在問題同時寫入變量)。


查看完整回答
反對 回復 2023-07-31
?
犯罪嫌疑人X

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

他正在使用緩沖通道,所以我不認為通道在這里做任何特殊的工作,任何普通的字符串切片也會做同樣的事情。



查看完整回答
反對 回復 2023-07-31
?
小唯快跑啊

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

作者似乎只是用一個人為的例子來說明渠道是如何工作的。也許他需要想出一個更現(xiàn)實的例子。但他確實說:

注意:編寫并發(fā)版本的 add 時可以采用多種方法和選項。此時不要糾結(jié)于我的特定實現(xiàn)。如果您有一個更具可讀性且性能相同或更好的版本,我很樂意與您分享。

因此,很明顯他并不是想為這項工作編寫最好的代碼,只是為了說明他的觀點。


查看完整回答
反對 回復 2023-07-31
  • 3 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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