Golang並發編程中select簡單了解


select可以監聽channel的數據流動
select的用法與switch語法非常類似,由select開始的一個新的選擇塊,每個選擇條件由case語句來描述

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

select { //不停的在這里檢測
case <-chanl : //檢測有沒有數據可以讀 //如果chanl成功讀取到數據,則進行該case處理語句
case chan2 <- 1 : //檢測有沒有可以寫 //如果成功向chan2寫入數據,則進行該case處理語句 //假如沒有default,那么在以上兩個條件都不成立的情況下,就會在此阻塞//一般default會不寫在里面,select中的default子句總是可運行的,因為會很消耗CPU資源
default: //如果以上都沒有符合條件,那么則進行default處理流程
}

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

如果其中的任意一個語句可以繼續執行(即沒有被阻塞),那么就從那些可以執行的語句中任意選擇一條來使用。
如果沒有任意一條語句可以執行(即所有的通道都被阻塞),那么有兩種可能的情況:
①如果給出了default語句,那么就會執行default的流程,同時程序的執行會從select語句后的語句中恢復。
②如果沒有default語句,那么select語句將被阻塞,直到至少有一個case可以進行下去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM