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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Go Channels:如何使這種非阻塞?

Go Channels:如何使這種非阻塞?

Go
慕斯709654 2021-10-04 15:39:47
我有一個(gè)腳本,它從數(shù)據(jù)庫(kù)中選擇一些數(shù)據(jù)并將其發(fā)送到一個(gè)通道以供多個(gè) goroutine 處理,然后將結(jié)果發(fā)送回主線程以在數(shù)據(jù)庫(kù)上更新。但是,它在將數(shù)據(jù)發(fā)送到第一個(gè)通道時(shí)掛起(可能阻塞)。頻道是在全球范圍內(nèi)創(chuàng)建的:var chin = make(chan in)var chout = make(chan out)in并且out都是structs首先啟動(dòng)goroutines:for i:=0; i<5; i++ {     go worker()}加載通道的代碼是:        if verbose {            fmt.Println(`Getting nextbatch2 and sending to workers`)        }        rows, err = nextbatch2.Query()        if err != nil {            panic(err)        }        var numtodo int        for rows.Next() {            err = rows.Scan(&id, &data)            if err != nil {                rows.Close()                panic(err)            }            // Start            var vin in            vin.id = id            vin.data = data            chin <- vin            numtodo++        }        rows.Close()然后緊接著:        if verbose {            fmt.Println(`Processing out channel from workers`)        }        for res := range chout {            update5.Exec(res.data, res.id)            if numtodo--; numtodo == 0 {                break            }        }并且在后臺(tái)worker()運(yùn)行多個(gè)goroutine:func worker() {      for res := range chin {            var v out            v.id = res.id            v.data = process(res.data)            chout <- v      }}此代碼在打印后掛起Getting nextbatch2 and sending to workers。它永遠(yuǎn)不會(huì)到達(dá)Processing out channel from workers。所以它掛在rows.Next()循環(huán)內(nèi)的某個(gè)地方,我無(wú)法弄清楚原因,因?yàn)閏hin通道應(yīng)該是非阻塞的——即使worker()goroutine 沒有處理它,它仍然至少應(yīng)該完成該循環(huán)。有任何想法嗎?編輯:通過fmt.Println(" on", numtodo)在rows.Next()循環(huán)末尾添加,我可以看到它在 5 之后阻塞,我不明白它應(yīng)該是非阻塞的,對(duì)吧?編輯2:通過將頻道更改為make(chan in/out, 100)現(xiàn)在將在 105 之后阻塞。
查看完整描述

1 回答

  • 1 回答
  • 0 關(guān)注
  • 292 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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