select 結構組成主要是由 case 語句和執行的函數組成
是一種io多路復用機制,
case結構
~~~
type scase struct {
c *hchan // chan 管道
elem unsafe.Pointer // data element 元素指針
}
~~~
### **該函數執行邏輯大致如下:**
1. 鎖定scase語句中所有的channel
2. 按照隨機順序檢測scase中的channel是否ready
2.1 如果case可讀,則讀取channel中數據,解鎖所有的channel,然后返回(case index)
2.2 如果case可寫,則將數據寫入channel,解鎖所有的channel,然后返回(case index)
2.3 所有case都未ready,則解鎖所有的channel,然后返回(default index)
3. 所有case都未ready,且沒有default語句
3.1 將當前協程加入到所有channel的等待隊列
3.2 當將協程轉入阻塞,等待被喚醒
4. 喚醒后返回channel對應的case index
4.1 如果是讀操作,解鎖所有的channel,然后返回(case index)
4.2 如果是寫操作,解鎖所有的channel,然后返回(case index)
- Go準備工作
- 依賴管理
- Go基礎
- 1、變量和常量
- 2、基本數據類型
- 3、運算符
- 4、流程控制
- 5、數組
- 數組聲明和初始化
- 遍歷
- 數組是值類型
- 6、切片
- 定義
- slice其他內容
- 7、map
- 8、函數
- 函數基礎
- 函數進階
- 9、指針
- 10、結構體
- 類型別名和自定義類型
- 結構體
- 11、接口
- 12、反射
- 13、并發
- 14、網絡編程
- 15、單元測試
- Go常用庫/包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go優化
- Go問題排查
- Go框架
- 基礎知識點的思考
- 面試題
- 八股文
- 操作系統
- 整理一份資料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小點
- 樹
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面試題
- 基礎
- Map
- Chan
- GC
- GMP
- 并發
- 內存
- 算法
- docker