91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Golang寫出高并發代碼的案例

發布時間:2021-02-20 16:22:57 來源:億速云 閱讀:373 作者:小新 欄目:編程語言

小編給大家分享一下利用Golang寫出高并發代碼的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

核心要點

將請求放入隊列,通過一定數量(例如CPU核心數)goroutine組成一個worker池(pool),workder池中的worker讀取隊列執行任務

實例代碼

以下代碼筆者根據自己的理解進行了簡化,主要是表達出個人的思路,實際后端開發中,根據實際場景修改

func doTask() {
 //耗時炒作(模擬)
 time.Sleep(200 * time.Millisecond)
 wg.Done()
}

//這里模擬的http接口,每次請求抽象為一個job
func handle() {
 //wg.Add(1)
 job := Job{}
 JobQueue <- job
}

var (
 MaxWorker = 1000
 MaxQueue = 200000
 wg  sync.WaitGroup
)

type Worker struct {
 quit chan bool
}

func NewWorker() Worker {
 return Worker{
  quit: make(chan bool)}
}

// Start method starts the run loop for the worker, listening for a quit channel in
// case we need to stop it
func (w Worker) Start() {
 go func() {
  for {
   select {
   case <-JobQueue:
    // we have received a work request.
    doTask()
   case <-w.quit:
    // we have received a signal to stop
    return
   }
  }
 }()
}

// Stop signals the worker to stop listening for work requests.
func (w Worker) Stop() {
 go func() {
  w.quit <- true
 }()
}

type Job struct {
}

var JobQueue chan Job = make(chan Job, MaxQueue)

type Dispatcher struct {
}

func NewDispatcher() *Dispatcher {
 return &Dispatcher{}
}

func (d *Dispatcher) Run() {
 // starting n number of workers
 for i := 0; i < MaxWorker; i++ {
  worker := NewWorker()
  worker.Start()
 }
}

測試

func Benchmark_handle(b *testing.B) {
 runtime.GOMAXPROCS(runtime.NumCPU())
 d := NewDispatcher()
 d.Run()
 for i:=0;i<10000;i++ {
  wg.Add(1)
  handle()
 }
 wg.Wait()
}

測試結果

pkg: golang-study-demo/goroutine
1 2029931652 ns/op
PASS

1w個任務放到隊列中,1000個worker去執行任務,每個任務的耗時200ms,任務執行完需要2s多

以上是“利用Golang寫出高并發代碼的案例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

息烽县| 会泽县| 郧西县| 沈阳市| 南江县| 定兴县| 建德市| 都兰县| 桓台县| 岳阳县| 旌德县| 望奎县| 铁岭县| 大洼县| 龙井市| 宁阳县| 福建省| 卢龙县| 沅江市| 莱芜市| 刚察县| 泗洪县| 板桥市| 崇仁县| 阿城市| 绿春县| 贵溪市| 类乌齐县| 建湖县| 玉树县| 方山县| 天柱县| 延庆县| 集安市| 崇明县| 双辽市| 繁昌县| 尚志市| 瑞金市| 应城市| 汉寿县|