golang并行編程模型范型舉例

在實際的日常開發中,按照場景來考慮golang的并行編程模型是比較合適的一種做法, 這樣既避免了空談,又能清晰易懂,代入感比較強

  • 場景一 并行處理很多任務,任務之間彼此不用進行信息匯總或者通信

比如現在我們有一個程序,是要請求很多URL,只要每個協程能發出請求便可,沒必要驗證請求結果和請求進行時設置數據,或者通信數據, 這種場景因為沒有涉及到數據流的走向,所以用WaitGroup比較合適


var wg sync.WaitGroup

func ReqUrl() {
  // 請求URL

  defer wg.Done()
}

func main() {
  urlCout := 10
  for i := 0; i < urlCout; i++ {
    wg.Add(1)
    go ReqUrl()
  }

  wg.Wait()
}


  • 場景二 并行處理很多任務,任務之間彼此需要進行信息匯總或者通信 還是上面的場景,但是現在我們需要統計url的請求結果,假如有一個url請求失敗,則程序退出

var FailUrl chan int

func ReqUrl()  {
  // 請求URL
  res := 1      // 請求結果不成功
  if res == 1 {
    FailUrl <- 1
  }
}

func main() {
  urlCount := 10
  for i := 0; i < urlCount; i++ {
    go ReqUrl()
  }

  // 監聽 FailUrl, 只要有一個url失敗,則退出
  for {
    select {
    case fail := <- FailUrl:
      fmt.Println(fail)
      os.Exit(fail)
    }
  }
}


其他的場景后續再補充

本文鏈接:參與評論 ?

--EOF--

提醒:本文最后更新于 106 天前,文中所描述的信息可能已發生改變,請謹慎使用。

專題「編程語言」的其它文章 ?

Comments

toto足球指数