主頁 > 知識庫 > golang 40行代碼實現(xiàn)通用協(xié)程池

golang 40行代碼實現(xiàn)通用協(xié)程池

熱門標(biāo)簽:建造者2地圖標(biāo)注 阿里云ai電話機器人 濱州自動電銷機器人排名 釘釘有地圖標(biāo)注功能嗎 浙江高頻外呼系統(tǒng)多少錢一個月 汕頭小型外呼系統(tǒng) 惠州電銷防封電話卡 黃岡人工智能電銷機器人哪個好 鄭州亮點科技用的什么外呼系統(tǒng)

代碼倉庫

goroutine-pool

golang的協(xié)程管理

golang協(xié)程機制很方便的解決了并發(fā)編程的問題,但是協(xié)程并不是沒有開銷的,所以也需要適當(dāng)限制一下數(shù)量。

不使用協(xié)程池的代碼(示例代碼使用chan實現(xiàn),代碼略啰嗦)

func (p *converter) upload(bytes [][]byte) ([]string, error) {
  ch := make(chan struct{}, 4)
  wg := sync.WaitGroup{}
  wg.Add(len(bytes))
  ret := make([]string, len(bytes))
  // 上傳
  for index, item := range bytes {
    ch - struct{}{}
    go func(index int, imageData []byte) {
      defer func() {
        wg.Done()
        -ch
      }()
      link, err := qiniu.UploadBinary(imageData, fmt.Sprintf("%d.png", time.Now().UnixNano()))
      if err != nil {
        log.Println("上傳圖片失敗", err.Error())
        return
      }
      ret[index] = link
    }(index, item)
  }
  wg.Wait()
  return ret, nil
}

需要實現(xiàn)的需求有兩個:

限制最大協(xié)程數(shù),本例為4

等待所有協(xié)程完成,本例為bytes切片長度

使用協(xié)程池的代碼

func (p *converter) upload(bytes [][]byte) ([]string, error) {
  ret := make([]string, len(bytes))
  pool := goroutine_pool.New(4, len(bytes))

  for index, item := range bytes {
    index := index
    item := item
    pool.Submit(func() {
      link, err := qiniu.UploadBinary(item, fmt.Sprintf("%d.png", time.Now().UnixNano()))
      if err != nil {
        log.Println("上傳圖片失敗", err.Error())
        return
      }

      ret[index] = link
    })
  }
  pool.Wait()
  return ret, nil
}

可以看到最大的區(qū)別是只需要關(guān)注業(yè)務(wù)邏輯即可,并發(fā)控制和等待都已經(jīng)被協(xié)程池接管

總結(jié)

以上所述是小編給大家介紹的golang 40行代碼實現(xiàn)通用協(xié)程池,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能
  • golang協(xié)程池設(shè)計詳解
  • GO實現(xiàn)協(xié)程池管理的方法

標(biāo)簽:泰安 晉中 瀘州 滄州 阿壩 駐馬店 昭通 東營

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 40行代碼實現(xiàn)通用協(xié)程池》,本文關(guān)鍵詞  golang,40行,代碼,實現(xiàn),通用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang 40行代碼實現(xiàn)通用協(xié)程池》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang 40行代碼實現(xiàn)通用協(xié)程池的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章