主要學習了菜鳥程式設計: go 併發
總結:go func 可以起乙個執行緒,輕量級的執行緒,執行緒之間採用chan進行傳值。
package main
import
"fmt"
func
sum(s [
]int
, c chan
int)
c <- sum // 把 sum 傳送到通道 c
}func
main()
// 緩衝區大小為2
c :=
make
(chan
int,2)
gosum
(s[:
len(s)/2
], c)
gosum
(s[len
(s)/2:
], c)
x, y :=
<-c,
<-c // 從通道 c 中接收
fmt.
println
(x,"+"
, y,
"=", x+y)
}
輸出
-5+
17=12
另乙個例子
package main
import
("fmt"
)func
fibonacci
(n int
, c chan
int)
close
(c)//關閉
}func
main()
}
package main
import
("fmt"
"time"
)func
say(s string)}
func
say2
(s string)}
func
main()
輸出
hello 100
world 150
hello 200
world 300
hello 300
hello 400
world 450
hello 500
只輸出三次world,因為mian已經退出了,所以結束了,沒阻塞。
解決:採用通道傳值進行阻塞,因為通道寫和讀都是阻塞的。
package main
import
("fmt"
"time"
)func
say(s string)}
func
say2
(s string
, ch chan
int)
ch <-
0close
(ch)
}func
main()
輸出
hello 100
world 150
hello 200
hello 300
world 300
hello 400
world 450
hello 500
world 600
world 750
0
Go語言的併發簡單總結
goexit結束當前goroutine,會呼叫defer,不會產生panic 1.6.扇入扇出 fan in fan out 1.7 通知退出機制 通知退出機制是學習使用context庫的基礎 lable for 2.併發正規化 2.1 生成器 2.2 管道 輸入輸出都是chan的時候,鏈式呼叫 2...
go學習 goroutine併發學習總結
go最大的特性就是併發了,所以這一塊是go的重點知識,我自己花了一些時間,好好學習這個基礎知識。文章內容為個人學習理解,所以文章如果有不對之處,非常感謝指出。說起go併發,一般都會指go協程,即goroutine,而實現goroutin的關鍵字就是go。我學習go併發用到的關鍵字總結 sync.mu...
Go語言併發
協程 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現重寄存於執行緒中,因此,系統開銷極小,可以有效提高執行緒的任務併發性,從而避免多執行緒的缺點。使用協程的優點是程式設計簡單,結構清晰 缺點是需要語言的支援。協程最大優勢 輕量級 可以輕鬆建立上百萬個而不會導致系統資源衰竭...