Top Page

read

Process

再講 Thread 前,需要稍微提到 Process 這個東西:

  • 程式碼執行時會產生出 Process,並且透過 Process 去執行
  • Process 需要一些資源才能完成工作,如 CPU、記憶體、I/O 裝置
  • 每個 Process 都是互相獨立
  • Process 不是執行單位,而是 Thread 的容器

Tread

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,這個就讓我們留到明天再說吧!

結尾

有任何問題,歡迎與我告知 :)

Blog Logo

yuchan


Published