站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

golang select不阻塞嗎

golang select不阻塞嗎

select是go語言中常用的一個關(guān)鍵字,是用來監(jiān)聽和channel有關(guān)的IO操作,當(dāng) IO 操作發(fā)生時,觸發(fā)相應(yīng)的動作。

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

否則:

如果有default子句,則執(zhí)行該語句。

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

基本用法

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

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

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...")     }

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

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国产在视频线精品视频二代| 国产乱码精品一区二区三| 模特私拍国产精品久久| 日产精品久久久久久久性色| 国内精品久久九九国产精品| 国产精品伊人久久伊人电影| 日韩丝袜在线观看| 国产日韩AV免费无码一区二区| 成人精品一区久久久久| 精品久久久久久久无码久中文字幕| 2020国产欧洲精品视频| 精品成在人线AV无码免费看 | 91久久精品视频| 精品无码国产一区二区三区AV| 国产国产精品人在线观看| 亚洲精品无码高潮喷水在线| 99re8这里有精品热视频免费| 精品久久久久久无码人妻热| 国产69精品久久久久9999| 亚洲国产精品第一区二区三区| 午夜精品久久久内射近拍高清| 精品福利视频第一| 丁香六月婷婷精品免费观看| 九九在线精品视频| 国产福利精品视频自拍 | 日韩精品久久不卡中文字幕| 国产精品爽黄69天堂a片| 在线观看精品一区| 亚洲欧美日韩综合俺去了| 日韩一区二区三区在线观看| 国产一卡2卡3卡四卡精品一信息| 国产精品100页| 国产日韩在线视频免费播放| 日韩精品久久无码中文字幕| 精品一区二区三区在线观看l | 国产乱人伦偷精品视频下| 国产三级精品三级男人的天堂| 国产精品久久现线拍久青草| 日韩电影在线观看第一区| 日韩精品乱码AV一区二区| 青青草99热这里都是精品|