goroutine:
由go執行環境管理的輕量級執行緒
channel:
有型別的管道,操作符為 <- 資料流向箭頭指向的方向
使用make(chan 緩衝資料型別 緩衝區長度)來建立
使用close(chan)來關閉管道,只有傳送者才允許關閉管道
例ch := make(chan int 10)
ch <- 10
a := <- ch
或a := int(0)
a = <- ch
單向管道:單向管道只能用於傳送或接收資料。
ch1 := make( chan int)
ch2 := <-chan int(ch1) //ch2就被定義為乙個只能讀取的channel
ch3 := chan<- int(ch1) //ch3就被定義為乙個只能接收的channel
select:
為了讓乙個goroutine能在多個通訊操作上進行等待,可以使用select
select會阻塞,直到某個分支中的通訊準備好後可以繼續執行。
當有多個通訊準備好時,會隨機選擇乙個進行通訊。
同步:
同步必須使用到鎖,sync包中提供了兩種鎖:sync.mutex 和 sync.rwmutex。
mutex是最簡單的互斥量。
rwmutex也是一種互斥量,不過在讀操作時,會阻止寫,但不會阻止讀。
GO語言學習 併發
通道channel 併發 concurrency 邏輯上具備同時處理多個任務的能力。並行 parallesim 不同於併發,物理上的同一時刻,相當於併發設計的理想執行模式。在函式呼叫前新增go關鍵字即可建立併發任務 a 100go func x,y int a,counter a a 66print...
Go語言學習筆記 併發
區別 1.併發 邏輯上具備同時處理多個任務的能力,指的是多個任務在同一時間段執行而不是同一時刻 2.並行 物理上同一時刻執行多個任務 goroutine像乙個多執行緒和協程的綜合體,執行時會建立多個限制來執行併發任務,且任務單元可排程到其他執行緒並行執行,最大限度提公升執行效率。go println...
go語言學習備忘 併發
並行是讓不同的 片段同時在不同的物理處理器上執行。並行的關鍵是同時做很多事情,而併發是指同時管理很多事情,這些事情可能只做了一半就被暫停去做別的事情了。在很多情況下,併發的效果比並行好,因為作業系統和硬體的總資源一般很少,但能支援系統同時做很多事情。這種 使用較少的資源做更多的事情 的哲學,也是指導...