在進入 Go 的重頭戲 Concurrency 前,需要先來了解一下執行序(thread)是什麼,那麼我們就進入正題吧 ─=≡Σ(((っ゚∀゚)っ
再講 Thread 前,需要稍微提到 Process 這個東西:
Thread 可以說是 Process 這個工廠內的作業員,一個 Prcocess 內可以有一到多個 Thread 去處理這個工廠內的業務,而 Thread 又可以分成單執行緒(single-thread)或是多執行緒(multi-thread)。
單執行緒的形況下,每行程式碼都會依照順序執行,以工廠的概念就是每件事情都一定要 A 完成後才能做 B。
多執行緒的話,並沒有誰先處理的狀況,只要 CPU 數量足夠就能夠同步處理,以工廠概念就是 A 跟 B 只要人力允許的情況下,就能夠同步進行作業,效率更能夠大大的提升。
用 Go 來示範看看吧!
單執行緒:
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
say("world")
say("hello")
}
// Output:
// world
// world
// world
// world
// world
// hello
// hello
// hello
// hello
// hello
多執行序:
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
// Output:
// hello
// world
// world
// hello
// hello
// world
// world
// hello
// hello
嘿,有發現只要呼叫函式時在前面加 go
,順序就不會是先做完 say("world")
才執行 say("hello")
嗎?
這就是 Go 的 goroutine,這個就讓我們留到明天再說吧!
有任何問題,歡迎與我告知 :)
本篇文章同步發佈於我的部落格