[Golang] Concurrency vs parallelism

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研發設計者之一

 

                              這個常數可以識別在哪麼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