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 ...