Go语言学习笔记 - PART13 - 协程与通道
生活随笔
收集整理的這篇文章主要介紹了
Go语言学习笔记 - PART13 - 协程与通道
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
協(xié)程
應(yīng)用程序處理并發(fā)的部分
- 協(xié)程跟操作系統(tǒng)的線程之間不是一對一的關(guān)系
- 協(xié)程是獨立執(zhí)行的,它們之間必須同行才會變得有用
通道
負責協(xié)程之間的通信,從而避免所有由共享內(nèi)存導致的陷阱
- 通道只能傳輸一種類型的數(shù)據(jù)(任意一種類型)
- 通道聲明方式
- 通信操作符 : 標識數(shù)據(jù)的傳輸,數(shù)據(jù)按照箭頭的方向流動
- for循環(huán)從通道中獲取數(shù)據(jù)
- 指定通道的方向
- 關(guān)閉通道
- 通道是可以被顯示關(guān)閉的;只有發(fā)送方需要關(guān)閉通道,接收方不需要關(guān)閉通道
- close函數(shù)關(guān)閉通道
- 將通道標記為無法通過發(fā)送操作<-接受更多的值;給已經(jīng)關(guān)閉的通道發(fā)送或者再次關(guān)閉都會導致運行時的 panic
- 檢測通道是否關(guān)閉
協(xié)程切換
select {case u:= <- ch1:...case v:= <- ch2:......default: // no value ready to be received...} 復制代碼- 通過select關(guān)鍵字,從不同的并發(fā)執(zhí)行的協(xié)程中獲取值
- select關(guān)鍵字可以監(jiān)聽進入通道的數(shù)據(jù)或從通道出去的數(shù)據(jù)
- select 要做的事,選擇處理列出多個通信情況中的一個
- 如果都阻塞了,會等待知道其中一個可以處理
- 如果多個可以處理,隨機選擇一個
- 如果沒有通道操作可以處理,但寫了default語句,它就會執(zhí)行default(確保不被阻塞)
入門教程推薦: github.com/Unknwon/the…
總結(jié)
以上是生活随笔為你收集整理的Go语言学习笔记 - PART13 - 协程与通道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql8双机热备高可用配置
- 下一篇: mobaxterm用alt键作为meta