站長資訊網
        最全最豐富的資訊網站

        golang select不阻塞嗎

        golang select不阻塞嗎

        select是go語言中常用的一個關鍵字,是用來監聽和channel有關的IO操作,當 IO 操作發生時,觸發相應的動作。

        如果有多個case都可以運行,Select會隨機公平地選出一個執行。其他不會執行。 (推薦學習:go)

        否則:

        如果有default子句,則執行該語句。

        如果沒有default字句,select將阻塞,直到某個通信可以運行;Go不會重新對channel或值進行求值。

        基本用法

        //select基本用法 select { case <- chan1: // 如果chan1成功讀到數據,則進行該case處理語句 case chan2 <- 1: // 如果成功向chan2寫入數據,則進行該case處理語句 default: // 如果上面都沒有成功,則進入default處理流程

        如果有一個或多個IO操作可以完成,則Go運行時系統會隨機的選擇一個執行,否則的話,如果有default分支,則執行default分支語句,如果連default都沒有,則select語句會一直阻塞,直到至少有一個IO操作可以進行

        start := time.Now()     c := make(chan interface{})     ch1 := make(chan int)         ch2 := make(chan int)      go func() {          time.Sleep(4*time.Second)         close(c)     }()      go func() {          time.Sleep(3*time.Second)         ch1 <- 3     }()        go func() {          time.Sleep(3*time.Second)         ch2 <- 5     }()      fmt.Println("Blocking on read...")     select {     case <- c:          fmt.Printf("Unblocked %v later.n", time.Since(start))      case <- ch1:          fmt.Printf("ch1 case...")       case <- ch2:          fmt.Printf("ch1 case...")     default:          fmt.Printf("default go...")     }

        運行上述代碼,由于當前時間還未到3s。所以,目前程序會走default。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 人妻偷人精品成人AV| 久久99精品久久久久婷婷| 亚洲国产精品无码专区| 极品精品国产超清自在线观看| 亚洲精品国偷自产在线| 久久精品亚洲福利| 国产成人亚洲精品91专区手机| 99精品久久精品一区二区| 亚洲综合无码精品一区二区三区| 精品国产日韩亚洲一区| 国产精品gz久久久| 日本精品久久久中文字幕| 99久久精品九九亚洲精品| 久久久精品2019免费观看| 日韩欧美国产精品第一页不卡| 国产99视频精品免费视频76| 精品一区二区三区在线视频| 99精品人妻无码专区在线视频区 | 欧美国产日本精品一区二区三区| 久久久精品人妻一区二区三区蜜桃| 亚洲精品无码鲁网中文电影| 亚洲精品国精品久久99热| 青青久久精品国产免费看| 精品一区二区三区高清免费观看 | 55夜色66夜色国产精品视频| 精品国产乱码久久久久久1区2区 | 精品久久久久久久久久久久久久久| 国产精品 码ls字幕影视| 亚洲国产精品一区| 97视频在线精品国自产拍| 国产成人高清精品一区二区三区 | 中日韩产精品1卡二卡三卡| 亚洲精品在线视频| 在线观看自拍少妇精品| 亚洲精品无码乱码成人| 无码人妻精品一区二区三18禁 | 亚洲欧美日韩精品久久亚洲区 | 亚洲中文久久精品无码ww16 | 欧美激情精品久久久久久久九九九 | 国产AV午夜精品一区二区入口| 69久久夜色精品国产69|