我是小白呀 2021-08-15 14:28:04 阅读数:374
Golang 是一個跨平臺的新生編程語言. 今天小白就帶大家一起攜手走進 Golang 的世界. (第 16 課)
協程 (Coroutine) 是一種基於線程之上, 但又比線程更加輕量級的存在. 一個進程可以擁有多個線程, 一個線程也可以擁有多個協程. 協程擁有高並發, 高 I/O, 低計算.
並發:
並行:
進程:
線程:
協程:
package main
import (
"fmt"
"time"
)
func main() {
// 協程並發
go helloword("222")
go helloword("333")
// 函數調用
helloword("111")
}
func helloword(str string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(str)
}
}
輸出結果:
222
111
333
333
222
111
222
111
333
111
222
333
222
111
我們可以看到輸出沒有固定先後順序.
不適用並發:
Go 語言中的通道 (Channel) 是一種特殊的類型. 在任何時候, 同時只能有一個 goroutine 訪問通道進行發送和獲取數據. 通道就像一個隊列, 遵循啊先入先出的原則, 保證收發數據的順序.
格式:
通道實例 := make(chan 數據類型)
例子:
package main
import "fmt"
func main() {
// 創建整數通道
var channel = make(chan string)
// 發送數據給通道
go func() {channel <- "message"}()
// 定義字符串變量
msg := <- channel
// 調試輸出
fmt.Print(msg)
}
輸出結果:
message
例子:
package main
import "fmt"
func send_msg(send chan string, msg string) {
send <- msg
}
func receive_msg(send chan string, receive chan string) {
receive <- <-send
}
func main() {
// 創建通道
var send = make(chan string)
var receive = make(chan string)
// 協程
go send_msg(send, "message")
go receive_msg(send, receive)
// 調試輸出
fmt.Println(<-receive)
}
輸出結果:
message
版权声明:本文为[我是小白呀]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815142745603a.html