校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang 40行代碼實現通用協程池

golang 40行代碼實現通用協程池

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

代碼倉庫

goroutine-pool

golang的協程管理

golang協程機制很方便的解決了并發編程的問題,但是協程并不是沒有開銷的,所以也需要適當限制一下數量。

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

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
}

需要實現的需求有兩個:

限制最大協程數,本例為4

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

使用協程池的代碼

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
}

可以看到最大的區別是只需要關注業務邏輯即可,并發控制和等待都已經被協程池接管

總結

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

您可能感興趣的文章:
  • golang協程池模擬實現群發郵件功能
  • golang協程池設計詳解
  • GO實現協程池管理的方法

標簽:泰安 晉中 瀘州 滄州 阿壩 駐馬店 昭通 東營

巨人網絡通訊聲明:本文標題《golang 40行代碼實現通用協程池》,本文關鍵詞  golang,40行,代碼,實現,通用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 40行代碼實現通用協程池》相關的同類信息!
  • 本頁收集關于golang 40行代碼實現通用協程池的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 库伦旗| 启东市| 湘西| 英德市| 聂拉木县| 天峨县| 泽州县| 襄汾县| 梅州市| 宾川县| 巴东县| 五常市| 陇南市| 镇原县| 天台县| 大石桥市| 昔阳县| 湖南省| 永嘉县| 农安县| 庆安县| 南昌市| 金沙县| 贞丰县| 城固县| 赤水市| 万山特区| 龙胜| 昭通市| 江孜县| 仙桃市| 定南县| 交口县| 磴口县| 苍梧县| 乌兰察布市| 南溪县| 井陉县| 万山特区| 林甸县| 上杭县|