Golang語言並行設計的核心goroutine
goroutine實現併發程式設計,goroutine之間通訊使用channel,channel不管是傳送資料還是接收資料都是阻塞的,channel預設無緩衝,但也可以指定緩衝大小變成有緩衝,空間有剩餘時是無阻塞,直到空間全部用完時才阻塞。
/**
* goroutine實現併發程式設計
* goroutine之間通訊使用channel
* channel不管是傳送資料還是接收資料都是阻塞的
* channel預設無緩衝,但也可以指定緩衝大小變成有緩衝,空間有剩餘時是無阻塞,直到空間全部用完時才阻塞
*/
package main
import (
"fmt"
)
func sum(a []int, c chan int) {
total := 0
for _, v := range a {
total += v
}
// 傳送total到c
c <- total
}
func fibonacci(n int, c chan int) {
x, y := 1, 1
for i := 0; i < n; i++ {
// 傳送x到c
c <- x
x, y = y, x+y
}
// 通過內建函式close關閉channel
close(c)
}
func main() {
a := []int{9, 2, 6, -5, 3, 0}
// 使用make建立channel,預設無緩衝,阻塞
c := make(chan int)
// 使用go關鍵字啟動goroutine
go sum(a[:len(a)], c)
go sum(a[len(a)/2:], c)
// 從c中接收資料
x, y := <-c, <-c
fmt.Println(x, y, x+y)
// 使用make建立有緩衝的channel,空間有剩餘時是無阻塞,直到空間全部用完時才阻塞
// 修改2為1則報錯,修改2為3則正常
c1 := make(chan int, 2)
c1 <- 1
c1 <- 2
fmt.Println(<-c1)
fmt.Println(<-c1)
c2 := make(chan int, 10)
// 使用go關鍵字啟動goroutine
go fibonacci(cap(c2), c2)
// 使用range讀取channel
for i := range c2 {
fmt.Println(i)
}
}
相關文章
- Golang併發程式設計優勢與核心goroutine及注意細節Golang程式設計
- Golang併發程式設計——goroutine、channel、syncGolang程式設計
- Golang語言goroutine協程併發安全及鎖機制Golang
- 第二小節 golang 語言設計Golang
- 《Go 語言程式設計》讀書筆記 (七) Goroutine 與系統執行緒的區別Go程式設計筆記執行緒
- go語言學習-goroutineGo
- 「Golang成長之路」函數語言程式設計Golang函數程式設計
- 透過三個例子,學習 Go 語言併發程式設計的利器 - goroutineGo程式設計
- 「Golang成長之路」函數語言程式設計篇Golang函數程式設計
- Java中的函數語言程式設計(八)流Stream並行程式設計Java函數程式設計並行行程
- 關於golang的goroutine schedulerGolang
- [Golang基礎]GoroutineGolang
- goroutine的多核並行化,讓出時間片Go並行
- Go語言 | CSP併發模型與Goroutine的基本使用Go模型
- Go語言goroutine排程器初始化Go
- Golang 的 goroutine 是如何實現的?Golang
- golang語言除錯Golang除錯
- C語言 之 多執行緒程式設計C語言執行緒程式設計
- Golang-goroutine02(MPG模式+設定CPU數目)Golang模式
- golang pprof 監控系列(4) —— goroutine thread 統計原理Golangthread
- Go語言排程器之盜取goroutine(17)Go
- Golang語言排序的幾種方式Golang排序
- Golang語言之gRPC程式設計示例GolangRPCC程式程式設計
- golang程式設計師前景怎麼樣?Python、Java、go語言的優勢互比Golang程式設計師PythonJava
- 第 12 期 golang 中 goroutine 的排程Golang
- 程式語言設計,程式設計哲學程式設計
- 在ubuntun虛擬機器裡安裝goLang語言程式設計環境Ubuntu虛擬機Golang程式設計
- Go語言排程器之排程main goroutine(14)GoAI
- RAC的函數語言程式設計函數程式設計
- 因 AI 而設計的語言 LISPAILisp
- [8 小時 coding] 圖解 golang 裡面的讀寫鎖實現與核心原理分析瞭解程式語言背後設計圖解Golang
- Golang —— goroutine(協程)和channel(管道)Golang
- Golang 獲取 goroutine id 完全指南Golang
- c語言程式設計題C語言程式設計
- ‘程式語言‘ ’程式設計工具’程式設計
- 函數語言程式設計函數程式設計
- JAVA語言程式設計思想Java程式設計
- 網址多語言設計