天天看點

協程的簡單操作,你都知道哪些?Golang如何實作協程交替列印?

部落客介紹:

– 我是了 凡 微信公衆号【​​了凡銀河系​​】期待你的關注。未來大家一起加油啊~

前言

對于并發的概念,我們都清楚為了合理利用CPU的執行效率,我們選擇當一個事務或多個事務執行時交替執行對于當下的計算機執行是很快的并且是對使用者無感的,是以我們往往采用極少的資源執行更多事情。假設目前需要執行兩個協程,一個協程來執行字母,一個協程執行數字,讓兩個協程進行交替列印如何實作?又或者如何使用大量的多個協程來交替的執行從一數到五萬這樣的大任務呢?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點選跳轉到網站: ​​https://www.cbedai.net/lf​​

文章目錄

  • ​​前言​​
  • ​​公共變量​​
  • ​​協程列印數字​​
  • ​​協程列印字母​​
  • ​​所有代碼​​

公共變量

對于下方的WaitGroup方法可以參考我之前寫過的一篇文章

wg := sync.WaitGroup{}
wg.Add(2)
boolean := true
num, str := 1, 'A'
// 協程塊
// ......
wg.Wait()      

協程列印數字

go func() {
  defer wg.Done()
  for {
    if boolean {
      fmt.Print(num)
      num++
      fmt.Print(num)
      num++
      boolean = false
    }
    if num > 28 {
      break
    }
  }
}()      

協程列印字母

go func() {
  defer wg.Done()
  for {
    if !boolean {
      fmt.Print(string(str))
      str++
      fmt.Print(string(str))
      str++
      boolean = true
    }
    if str > 'Z' {
      break
    }
  }
}()      

所有代碼

package main

import (
  "fmt"
  "sync"
)

func main() {
  wg := sync.WaitGroup{}
  wg.Add(2)
  boolean := true
  num, str := 1, 'A'
  // 列印數字
  go func() {
    defer wg.Done()
    for {
      if boolean {
        fmt.Print(num)
        num++
        fmt.Print(num)
        num++
        boolean = false
      }
      if num > 28 {
        break
      }
    }
  }()
  // 列印字元
  go func() {
    defer wg.Done()
    for {
      if !boolean {
        fmt.Print(string(str))
        str++
        fmt.Print(string(str))
        str++
        boolean = true
      }
      if str > 'Z' {
        break
      }
    }
  }()
  wg.Wait()
}