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

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

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

代碼倉(cāng)庫(kù)

goroutine-pool

golang的協(xié)程管理

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

不使用協(xié)程池的代碼(示例代碼使用chan實(shí)現(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
}

需要實(shí)現(xiàn)的需求有兩個(gè):

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

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

使用協(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行代碼實(shí)現(xiàn)通用協(xié)程池,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

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

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

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