好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang實現并發數控制的方法

golang實現并發數控制的方法

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

golang并發

談到golang這門語言,很自然的想起了他的的并發goroutine。這也是這門語言引以為豪的功能點。并發處理,在某種程度上,可以提高我們對機器的使用率,提升系統業務處理能力。但是并不是并發量越大越好,太大了,硬件環境就會吃不消,反而會影響到系統整體性能,甚至奔潰。所以,在使用golang提供便捷的goroutine時,既要能夠實現開啟并發,也要學會如果控制并發量。

開啟golang并發

golang開啟并發處理非常簡單,只需要在調用函數時,在函數前邊添加上go關鍵字即可。如下邊例子所示:

package main
import (
  "fmt"
  "time"
)
type Demo struct {
  input     chan string
  output    chan string
  max_goroutine chan int
}
func NewDemo() *Demo {
  d := new(Demo)
  d.input = make(chan string, 24)
  d.output = make(chan string, 24)
  d.max_goroutine = make(chan int, 20)
  return d
}
func (this *Demo) Goroutine() {
  var i = 1000
  for {
    this.input - time.Now().Format("2006-01-02 15:04:05")
    time.Sleep(time.Second * 1)
    if i  0 {
      break
    }
    i--
  }
  close(this.input)
}
func (this *Demo) Handle() {
  for t := range this.input {
    fmt.Println("datatime is :", t)
    this.output - t
  }
}
func main() {
  demo := NewDemo()
  go demo.Goroutine()
  demo.Handle()
}

上邊代碼,在調用Demo的Goroutine方法時,在前邊加上了go關鍵字,則函數Goroutine并發執行開啟成功。

可見,在golang中開啟并發非常的方便。

下邊再來看看,在golang中,怎么實現并發量的控制。

當goroutine并發執行的任務達到一定值時,主程序等待goroutine執行完成退出,一旦發現并發數量低于某一個設定的值,就從新開始執行主程序邏輯。

實現代碼如下:

package main
import (
  "fmt"
  "time"
)
type Demo struct {
  input     chan string
  output    chan string
  goroutine_cnt chan int
}
func NewDemo() *Demo {
  d := new(Demo)
  d.input = make(chan string, 8192)
  d.output = make(chan string, 8192)
  d.goroutine_cnt = make(chan int, 10)
  return d
}
func (this *Demo) Goroutine() {
  this.input - time.Now().Format("2006-01-02 15:04:05")
  time.Sleep(time.Millisecond * 500)
  -this.goroutine_cnt
}
func (this *Demo) Handle() {
  for t := range this.input {
    fmt.Println("datatime is :", t, "goroutine count is :", len(this.goroutine_cnt))
    this.output - t + "handle"
  }
}
func main() {
  demo := NewDemo()
  go demo.Handle()
  for i := 0; i  10000; i++ {
    demo.goroutine_cnt - 1
    go demo.Goroutine()
  }
  close(demo.input)
}

如上邊示例,Goroutine()函數,每隔500毫秒寫入一個時間戳到管道中,不考慮管道的讀取時間,也就是說,每個Goroutine會存在大概500毫秒時間,如果不做控制的話,一瞬間可以開啟上萬個甚至更多的goroutine出來,這樣系統就會奔潰。

在上述代碼中,我們引入了帶10個buffer的chan int字段,每創建一個goroutine時,就會向這個chan中寫入一個1,每完成一個goroutine時,就會從chan中彈出一個1。當chan中裝滿10個1時,就會自動阻塞,等待goroutine執行完,彈出chan中的值時,才能繼續開啟goroutine。通過chan阻塞特點,實現了goroutine的最大并發量控制。

以上這篇golang實現并發數控制的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 如何利用Golang寫出高并發代碼詳解
  • golang高并發的深入理解
  • golang并發ping主機的方法

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

巨人網絡通訊聲明:本文標題《golang實現并發數控制的方法》,本文關鍵詞  golang,實現,并發,數,控制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang實現并發數控制的方法》相關的同類信息!
  • 本頁收集關于golang實現并發數控制的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 日批软件免费| 国产在线观看借贷裸偿| 色欲aV午夜福利66m| 催眠调教高冷傲慢美妇的臀眼| 男人鸡鸡插女人| 色图综合| 韩国日本三级三级人| 5060精品国产福利午夜| 播播色播性播私人影院| 国产精品激情Av久久久青桔| 被两个同桌绑起来玩乳动态gif| 在车里被两个男人添下面| 国产尤物福利视频一区二区| 男女一边摸一吻胸做爽视频| 涩涩爱网站| jiuma和我啪啪| 国产全黄三级国产全黄三级书| 中国艳妇laralatex| 韩国女主播bj无删减观看| 久久久久88色偷偷免费| 色夜夜摸狠狠摸日日视频| 亚洲一区在线播放| 粗大挺进怀孕的老师| 狂野小农民在线高清版在线观看| 亚洲AV天堂一区二区美女图片| 91丨国产丨白浆秘?冰块| 好爽我要h| 日本h片在线观看| 蜜桃久久久亚洲精品成人 | 专干老熟女A片| 免费国精产品一二二区早| 欧美激情第一区| 办公上班前打一炮20p| 免费的全黄一级录像带| 大尺度到肉黄文多p| 国产性精品| MM131美女图片| 同志电影《囚》在线观看| 毛片不卡一区二区三区| 亚洲国产成人久久精品app| 肚脐电影完整版免费播放|