在某些場景下我們需要同時從多個通道接收資料。通道在接收資料時,如果沒有資料可以接收發生阻塞。
你也許會寫出**使用遍歷的方式來實現:
for
這種方式雖然可以實現從多個channel接收值的需求,但是執行效能會差很多。為了應對這種場景,go內建了select
關鍵字,可以同時響應多個通道的操作。
select
的使用類似於switch語句,它有一些列case分支和乙個預設的分支。每個case會對應乙個通道的通訊(接收或傳送)過程。select
會一直等待,直到某個case
的通訊操作完成時,就會執行case
分支對應的語句。
具體格式如下:
多路復用 select
在之前寫過一篇五種i o模型,感興趣的可以去看一下,今天主要講其中的一種,那就是i o多路復用。因為i o多路復用可以使乙個程序同時處理多個連線。這對提高程式的效能至關重要。對於io復用的概念與理解在上文說的挺清楚了。本文主要說實現io復用的系統呼叫。在linux下,實現io復用的系統呼叫主要有三個...
select 函式 多路復用
select 的機制中提供一fd set的資料結構,實際上是一long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他 檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fd set的內容,...
IO多路復用 select
select系統呼叫的目的是 在一段指定時間內,監聽使用者感興趣的檔案描述符上的可讀 可寫和異常事件。poll和select應該被歸類為這樣的系統 呼叫,它們可以阻塞地同時探測一組支援非阻塞的io裝置,直至某乙個裝置觸發了事件或者超過了指定的等待時間 也就是說它們的職責不是做io,而是幫助 呼叫者尋...