Golang利用select實現goroutine的逾時控制

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

簡單的說下select是幹什麼的?

select用來讓我們的程式監視多個檔案控制代碼(file descriptor)的狀態變化的處理機制。當你發起一些阻塞的請求後,你可以使用select機制輪訓掃描fd,直到被監視的檔案控制代碼有某一個或多個發生了狀態改變。 


該文章寫的有些亂,歡迎來噴 ! 另外文章後續不斷更新中,請到原文地址查看更新。

http://xiaorui.cc/?p=2997

本來只是想說下select,但又忍不住廢話下說下epoll的處理流程:

我們可以把要監控讀寫的檔案交給核心(epoll_add),而核心通過中斷的方式得知事件通知. 這要比select好不少.設定你關心的事件(epoll_ctl),比如讀事件.然後等(epoll_wait),此時,如果沒有哪個檔案有你關心的事件,則休眠,直到有事件,被喚醒,然後返回那些事件.Epoll的優勢在於,由接收資料的OS來負責通知你有資料可以操作,因為OS是知道什麼時候有資料的。select 跟golang有啥關聯? 首先我們通過上面的介紹得知,select是通過線性掃描的方式監視檔案描述符是否有變動. channnel在系統層面來說也是個檔案描述符。 在golang裡我們可以使用goroutine並發執行任務,接著使用select來監視每個任務的channel情況.  但如果這幾個任務都長時間沒有回複channel資訊,如果我們又有逾時timeout需求,那麼我們可以使用起一個goroutine,這個goroutine任務邏輯啟動sleep,等sleep之後回複channel訊號。 

說了這麼多沒用的,才聊到咱們golang goroutine select正事….

Python#http://xiaorui.ccpackage mainimport ( "fmt" "time")func main() { timeout := make(chan bool, 1) go func() { time.Sleep(3 * time.Second) // sleep 3 second timeout <- true }() ch := make(chan int) select { case <-ch: case <-timeout: fmt.Println("task is timeout!") }}
1234567891011121314151617181920212223  #http://xiaorui.cc package main import (    "fmt"    "time") func main() {    timeout := make(chan bool, 1)    go func() {        time.Sleep(3 * time.Second) // sleep 3 second        timeout <- true    }()    ch := make(chan int)    select {    case <-ch:    case <-timeout:        fmt.Println("task is timeout!")    }}

上面golang那段代碼運行後的結果是:

Pythontask is timeout!
12  task is timeout!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.