婷婷综合国产,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行代碼實現通用協程池的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 沭阳县| 石渠县| 平江县| 梅河口市| 博兴县| 当雄县| 涿鹿县| 湟中县| 尖扎县| 灌南县| 阜城县| 军事| 曲靖市| 韶山市| 太保市| 兴安县| 民丰县| 乌拉特中旗| 桐庐县| 合江县| 南安市| 辛集市| 台湾省| 阿瓦提县| 盐津县| 福建省| 河西区| 达孜县| 宁安市| 定襄县| 周口市| 嘉义市| 阿拉善右旗| 额济纳旗| 阿合奇县| 准格尔旗| 沂水县| 枣阳市| 孙吴县| 平定县| 高尔夫|