Golang併發程式設計中select簡單了解

2022-03-23 00:08:15 字數 468 閱讀 8673

select可以監聽channel的資料流動

select的用法與switch語法非常類似,由select開始的乙個新的選擇塊,每個選擇條件由case語句來描述

與switch語句可以選擇任何使用相等比較的條件相比,select由比較多的限制,其中最大的一條限制就是每個case語句裡必須是乙個io操作

select

在乙個select語句中,go會按順序從頭到尾評估每乙個傳送和接收的語句。

如果其中的任意乙個語句可以繼續執行(即沒有被阻塞),那麼就從那些可以執行的語句中任意選擇一條來使用。

如果沒有任意一條語句可以執行(即所有的通道都被阻塞),那麼有兩種可能的情況:

①如果給出了default語句,那麼就會執行default的流程,同時程式的執行會從select語句後的語句中恢復。

②如果沒有default語句,那麼select語句將被阻塞,直到至少有乙個case可以進行下去。

Golang 併發程式設計

目錄傳送者 通道 有可能有資料阻塞 接受者 package main import fmt time func main time.sleep 2 time.second 主協程取資料 for i 0 i 3 i fmt.println 主協程結束 傳送者 通道 資料 資料 接受者 func mai...

Golang 併發程式設計

目錄傳送者 通道 有可能有資料阻塞 接受者 package main import fmt time func main time.sleep 2 time.second 主協程取資料 for i 0 i 3 i fmt.println 主協程結束 傳送者 通道 資料 資料 接受者 func mai...

golang併發程式設計

在早期,cpu都是以單核的形式順序執行機器指令。c語言 php正是這種順序程式語言的代表,即所有的指令都是以序列的方式執行,在相同的時刻有且僅有乙個cpu在順序執行程式的指令。隨著處理器技術的發展,單核時代以提公升處理器頻率來提高執行效率的方式遇到了瓶頸。單核cpu的發展的停滯,給多核cpu的發展帶...