久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

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

      golang select不阻塞嗎

      golang select不阻塞嗎

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

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

      否則:

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

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

      基本用法

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

      如果有一個或多個IO操作可以完成,則Go運行時系統會隨機的選擇一個執(zhí)行,否則的話,如果有default分支,則執(zhí)行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號