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.Sleep
s 或fmt.Printf
s,您有時(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í))。
- 1 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)