Golang Concurrency vs parallelism
- Concurrency vs parallelism 多執行緒 vs. 平行處理
- Only Golang build after dual were widely available. 只有Golang是在雙核心廣泛地應用之後才創造出來的(2016年後)
- Ease of programming, making concurrenvy easy. Google創造Golang為了去最大化利用多核心CPU,因此使用Golang可以很容易地去處理Concurrency(併發)
- 如果你有用過Java或是python去寫多併發執行緒,那麼妳一定知道是很難去設計的
- Rob Pike 大師說明:https://www.youtube.com/watch?v=cN_DpYBzKso
- Rob Pike 是 UTF-8設計者、Golang研發設計者之一
- Package runtime: 網址:https://godoc.org/runtime
這個常數可以識別在哪麼CPU架構上
const GOOS string = sys.GOOS
GOOS is the running program's operating system target: one of darwin, freebsd, linux, and so on. To view possible combinations of GOOS and GOARCH, run "go tool dist list". 這個常數就是看是哪個作業系統
-
Package sync: 網址:https://godoc.org/sync
-
這個package有type Mutex 和 WaitGroup
-
這邊實作 wg.Add(1) 新增一個需要等待的東西
-
wg.Done() 是通知 wg.Wait() 已完成
-
wg.Wait() 會等待需要等待的東西
-
package main import ( "fmt" "runtime" "sync" ) var wg sync.WaitGroup func main() { fmt.Println("OS\t\t", runtime.GOOS) fmt.Println("ARCH\t\t", runtime.GOARCH) fmt.Println("CPUs\t\t", runtime.NumCPU()) fmt.Println("Goroutines\t", runtime.NumGoroutine()) wg.Add(1) go foo() bar() fmt.Println("CPUs\t\t", runtime.NumCPU()) fmt.Println("Goroutines\t", runtime.NumGoroutine()) wg.Wait() } func foo() { for i := 0; i < 10; i++ { fmt.Println("foo:", i) } wg.Done() } func bar() { for i := 0; i < 10; i++ { fmt.Println("bar:", i) } }
-
-
End