Go語言程式設計基礎 併發 一 Go程 通道

2021-08-31 09:28:59 字數 1327 閱讀 2918

go程(goroutine)是由go執行時管理的輕量級執行緒。

# 啟動乙個go程並執行f

(x, y, z)gof

(x, y, z)

package main

import

("fmt"

"time"

)func

fff(s string)}

func

main()

通道是帶有型別的管道,可以使用通道操作符<-來傳送或接收值。

# 將v傳送至通道ch

ch <- v

# 從ch接收值並賦予v

v :=

<-ch

note:「箭頭就是資料流的方向」。

通道在使用前必須先建立。

# 建立通道

ch :=

make

(chan

int)

預設情況下,傳送與接收操作在另一端準備好之前都會阻塞。這使得go程在沒有顯式鎖或條件變數的情況下進行同步。

package main

import

"fmt"

func

sum(s [

]int

, c chan

int)

c <- sum

}func

main()

c :=

make

(chan

int)

gosum

(s[:

len(s)/2

], c)

gosum

(s[len

(s)/2:

], c)

x, y :=

<-c,

<-c

fmt.

println

(x, y, x + y)

}

通道可以帶緩衝,將緩衝長度作為第二個引數提供給make來初始化乙個帶緩衝的通道

ch :=

make

(chan

int,

100)

僅當通道的緩衝區填滿後,向其傳送資料時才會阻塞。當緩衝區為空時,接收方會阻塞。

package main

import

"fmt"

func

main()

for i :=

0; i <

len; i++

}

go語言併發程式設計

協程 coroutine 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現中寄存於執行緒中,系統開銷極小。package main import fmt func count ch chan int,i int func main for ch range chs chan...

Go語言基礎 併發

並行 多件事在同一時刻發生。併發 多件事在同一時間間隔發生。摘自 和 concurrent and parallel programming 上文如果用程式設計師的語言來講,cpu處理器相當於上圖的咖啡機的角色,任務相當於佇列中的人。一定要仔細閱讀此文 這篇文章提到了網路伺服器併發連線數 吐吞量 寬...

go語言基礎 併發

併發性 並行性 concurrency併發性 同時可以執行多條路徑,但是同一時間點上,只能執行1個。parallelism並行性 多條路徑同時執行,真正的並行多核支援。2.程序,執行緒,協程 多工 程序process 正在執行的程式。執行緒thread 程序中的一條執行路徑。協程coroutine ...