婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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行代碼實現通用協程池的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 太仆寺旗| 江陵县| 武胜县| 华池县| 普定县| 松滋市| 增城市| 清新县| 军事| 泉州市| 当阳市| 德惠市| 利津县| 射洪县| 大丰市| 弥勒县| 罗城| 和田县| 岢岚县| 顺平县| 远安县| 曲水县| 新泰市| 武胜县| 惠安县| 瑞昌市| 上思县| 新邵县| 阳谷县| 衡山县| 平定县| 曲麻莱县| 曲阳县| 出国| 宝应县| 渝中区| 浦北县| 府谷县| 衡阳市| 锡林浩特市| 新郑市|