Concurrency 寫法

  • 要把go 改成 Concurrency,只需要在Function前面加上go就可以

func main() { go foo() go bar() } func foo() { for i := 0; i < 50; i++ { fmt.Println("Foo:", i) } } func bar() { for i := 0; i < 50; i++ { fmt.Println("Bar:", i) } }
  • waiting group 概念
var wg sync.WaitGroup

func main() {
   wg.Add(2)
     go foo()
     go bar()
     wg.Wait()
}

func foo() {
   for i := 0; i < 50; i++ {
        fmt.Println("Foo:", i)
     }
     wg.Done()
}

func bar() {
   for i := 0; i < 50; i++ {
        fmt.Println("Bar:", i)
     }
     wg.Done()
}
  • 支援Multi thread
func init() {
   runtime.GOMAXPROCS(runtime.NumCPU())  // sets the maximum number of CPUs
}

var wg sync.WaitGroup

func main() {
   wg.Add(2)
     go foo()
     go bar()
     wg.Wait()
}

func foo() {
   for i := 0; i < 50; i++ {
        fmt.Println("Foo:", i)
            time.Sleep(3 * time.Millisecond)
     }
     wg.Done()
}

func bar() {
   for i := 0; i < 50; i++ {
        fmt.Println("Bar:", i)
     }
     wg.Done()
}
  • Rece Condition 問題使用 mutex