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

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

goroutine 輸出到通道順序已修復(fù)?

goroutine 輸出到通道順序已修復(fù)?

Go
縹緲止盈 2021-11-08 16:46:53
package mainimport "fmt"func sum(a []int, c chan int) {    sum := 0    for _, v := range a {        sum += v    }    c <- sum // send sum to c}func main() {    a := []int{7, 2, 8, -9, 4, 0}    c := make(chan int)    go sum(a[len(a)/2:], c)    go sum(a[:len(a)/2], c)    x, y := <-c, <-c // receive from c    fmt.Println(x, y, x+y)}x, y := <-c, <-c // receive from c為什么這一行總是打印相同的結(jié)果?我認(rèn)為應(yīng)該是 50/50 的機(jī)會(huì)打印 17 -5 12 或 -5 17 12我覺得兩個(gè)goroutine應(yīng)該是并行的提前致謝!package mainimport "fmt"import "time"import "math/rand"func sum(a []int, c chan int) {    sum := 0    for _, v := range a {        sum += v    }    time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000)))    c <- sum // send sum to c}func main() {    a := []int{7, 2, 8, -9, 4, 0}    c := make(chan int)    go sum(a[len(a)/2:], c)    go sum(a[:len(a)/2], c)    x, y := <-c, <-c // receive from c    fmt.Println(x, y, x+y)}我讓線程進(jìn)入睡眠狀態(tài),但同樣的事情發(fā)生了。我還在糾結(jié)。
查看完整描述

1 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

在這種情況下,假設(shè)它應(yīng)該是 50/50 的機(jī)會(huì)是不正確的。需要明確的是,我并不是建議它應(yīng)該始終是一個(gè)或另一個(gè),而是您不應(yīng)該期望每次程序運(yùn)行時(shí)它都會(huì)改變。該行為不一定是隨機(jī)的(甚至是偽隨機(jī)的)。

goroutine 的保證不是它會(huì)被安排在一個(gè)隨機(jī)的未來時(shí)間,而是它會(huì)在未來的某個(gè)時(shí)間運(yùn)行。如果調(diào)度器的當(dāng)前實(shí)現(xiàn)決定將 goroutines 放在一個(gè)簡(jiǎn)單的隊(duì)列中,它不會(huì)自動(dòng)意味著它被破壞了。對(duì)于您的特定代碼的情況,如果您在不同的地方粘貼幾個(gè)time.Sleeps 或fmt.Printfs,您有時(shí)可能會(huì)看到順序發(fā)生變化。

我想知道您是否將 Go 的調(diào)度程序?qū)ο乱粋€(gè) goroutine 的選擇select與與通道一起使用時(shí)記錄的偽隨機(jī)行為混淆了。那里的行為被定義為隨機(jī)的,正確地說行為應(yīng)該有 50/50 的機(jī)會(huì)。

據(jù)我所知,運(yùn)行時(shí)選擇哪個(gè) goroutine 并不是隨機(jī)的。這不是說它不能是隨機(jī)的,而是說它不應(yīng)該是隨機(jī)的。

重要的是你的代碼不應(yīng)該關(guān)心 goroutine 的調(diào)度順序。無論它總是像隊(duì)列一樣有序,或向后(堆棧),或隨機(jī),或其他(可能是現(xiàn)實(shí))。


查看完整回答
反對(duì) 回復(fù) 2021-11-08
  • 1 回答
  • 0 關(guān)注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報(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)