Golang Channel select

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Golang 中對Channel 的支援添加了select關鍵字,

Golang中基於Channel select的實現由監控、定時器等樣本參考http://blog.csdn.net/kjfcpua/article/details/18263839

執行流程有點類似switch case,case 後只能接channel輸出,可以用變數接收:num:=<-ch

若所有的case後的channel都沒有輸出,則繼續循壞等待,若所有的case後的channel均有輸出,則隨機播放一個case執行。


但是與for循壞有很大區別,應該是加入了sleep機制,不會佔滿CPU,下面程式監測程式,與for迴圈做對比。

  1 package main

  2 
  3 import(
  4     "time"
  5 )
  6 var quit chan int = make(chan int)
  7 func loop(ch chan int) {
  8     select {
  9         case <-ch:
 10         case <-time.After(time.Duration(20)*time.Second): quit <-0
 11         }
 12 }
 13 func gofor(ch chan int){
 14     for{ 
 15         _,ok:= <-ch;
 16         if ok {
 17             break
 18         }
 19     }
 20 }
 21 func main () {
 22     ch := make(chan int)
 23     /*
 24     close(ch)
 25     loop(ch)
 26     <-quit
 27     */ 
 28     go gofor(ch)
 29     time.Sleep(10*time.Second)
 30     ch<-0
 31 }

結果分析:

執行Channel select:CPU佔用0.0%


執行for迴圈:CPU佔用101%


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.