select
Unix中 select
想到的都是系統調用, I/O 模型時大都會提到基於 select
、poll
和 epoll
等函數構建的 IO 多路複用模型。Go 語言的 select
與 C 語言中的 select
有着比較相似的功能。
主要特性:
-
每個case都必須是一個通信
-
select
能在 Channel 上進行非阻塞的收發操作; -
select
在遇到多個 Channel 同時響應時會隨機挑選case
執行; -
如果沒有default字句,select將阻塞,直到某個通信可以運行;
非阻塞收發
存在收發的Channel時,直接處理該channel對應的case;
不存在可以收發的channel時,如果存在default,會執行default中的語句;
阻塞收發
沒有case條件,會阻塞;
不存在可以收發的channel,且不存在default會一直阻塞;