go語言學習(3) 協程

2021-07-27 17:18:07 字數 965 閱讀 8107

現在主流os呼叫粒度為執行緒,產生時鐘中斷後,中斷處理函式,如果當前執行緒時間片使用完畢。則切換到其他的執行緒,資源開銷很大。還有建立和銷毀執行緒是和很消耗執行緒資源的。特別是對於我們後台程式開發,為了減少不必要的效能開銷,廣泛採用"池"進行維護。

go語言語言級別支援協程。使用關鍵字go,**如下:

func run()

go run()

現在啟動了乙個run()協程,當然我們也給協程函式()傳遞引數

他同時支援物件的成員函式(),**如下:

type person struct

func (this *person) see()

func main()

這樣的話,我們就不需要進行所謂的「池」的維護,非同步任務採用協程去做,不用擔心協程開銷,對被動的連線處理,直接開啟協程進行io操作。開發者心智成本大大降低。

協程的使用自然少不了協程之間通訊,協程之間通訊採用隧道channel,channel也是乙個引用物件,通過內建函式make(),**如下:

io_chann:=make(chan int, 1)//建立大小1,型別為int的隧道

io_chann<-1

io_chann<-2 // 隧道已經滿,阻塞

這裡主要說一下協程如何通訊:**如下:

func recv(chann chan int) 

}func send(chann chan int)

}func main() {

chann := make(chan int, 256) // 大小256

go recv(chann)

go send(chann)

time.sleep(100 * time.second)

上面就是乙個簡單的協程之間通訊,很簡單

Go語言學習筆記 Go協程

併發 concurrency 是指一次處理大量事情的能力。讓我們用乙個 例子來說明。並行 parallelism 指的是同時處理多個事情。雖然聽起來像併發,但是它們是不同的。go 原生支援併發。在go中,使用 go 協程 goroutine 和通道 channel 來處理併發。函式 main 就以 ...

go語言學習(5)協程

goroutine的定義 1.任何函式只需加上go就能送給排程器執行 2.不需要在定義時區分是否是非同步函式 3.排程器在合適的點進行切換 4.使用 race來檢測資料訪問衝突 goroutine可能的切換點 1.i o select 2.channel 3.等待鎖 4.函式呼叫 5.runtime...

go語言之goroute協程

goroute協程 程序和執行緒 程序是系統進行資源分配和排程的基本單位,執行緒是cpu排程和發派的基本單位,乙個程序可以建立和撤銷多個執行緒 併發和並行 多執行緒程式在乙個核的cpu上面執行,是併發 多執行緒程式在多個核的cpu上面執行,這是並行 協程和執行緒 協程 獨立的棧空間,共享的堆記憶體,...