成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Go 中實現一個 Worker-Pool?

開發 后端
results也是一個通道類型,它的作用是保存每個job處理后產生的結果Result。

[[408801]]

本文轉載自微信公眾號「吳親強的深夜食堂」,作者吳親庫里。轉載本文請聯系吳親強的深夜食堂公眾號。

之前寫過一篇文章,它有個響亮的名字:Handling 1 Million Requests per Minute with Go使用 Go 每分鐘處理百萬請求

這是國外的一個作者寫的,我做了一篇說明,起的也是這個標題。

沒想到閱讀量是我最好的一篇,果然文章都是靠標題出彩的…..

今天偶然看到另一篇文章(原文在文末[1])。兩篇文章原理相似:有一批工作任務(job),通過工作池(worker-pool)的方式,達到多worker并發處理job的效果。

他們還是有很多不同的點,實現上差別也是蠻大的。

首先上一篇文章我放了一張圖片,大概就是上篇整體的工作流。

  • 每個worker處理完任務就好,不關心結果,不對結果做進一步處理。
  • 只要請求不停止,程序就不會停止,沒有控制機制,除非宕機。

這篇文章不同點在于:

首先數據會從generate(生產數據)->并發處理數據->處理結果聚合。

圖大概是這樣的,

然后它可以通過context.context達到控制工作池停止工作的效果。

最后通過代碼,你會發現它不是傳統意義上的worker-pool,后面會說明。

下圖能清晰表達整體流程了。

順便說一句,這篇文章實現的代碼比 使用 Go 每分鐘處理百萬請求 的代碼簡單多了。

首先看job。

這個可以簡單過一下。最終每個job處理完都會包裝成Result返回。

下面這段就是核心代碼了。

整個WorkerPool結構很簡單。jobs是一個緩沖channel。每一個任務都會放入jobs中等待處理woker處理。

results也是一個通道類型,它的作用是保存每個job處理后產生的結果Result。

首先通過New初始化一個worker-pool工作池,然后執行Run開始運行。

初始化的時候傳入worker數,對應每個g運行work(ctx,&wg,wp.jobs,wp.results),組成了worker-pool。

同時通過sync.WaitGroup,我們可以等待所有worker工作結束,也就意味著work-pool結束工作,當然可能是因為任務處理結束,也可能是被停止了。

每個job數據源是如何來的?

對應每個worker的工作,

每個 worker 都嘗試從同一個jobs獲取數據,這是一個典型的fan-out模式。當對應的g獲取到job進行處理后,會把處理結果發送到同一個results channel中,這又是一個fan-in模式。

當然我們通過context.Context可以對每個worker做停止運行控制。

最后是處理結果集合,

那么整體的測試代碼就是:

看了代碼之后,我們知道,這并不是一個傳統意義的worker-pool。它并不像上篇這篇文章一樣,初始化一個真正的worker-pool,一旦接收到job,就嘗試從池中獲取一個worker,把對應的job交給這個work進行處理,等work處理完畢,重新進行到工作池中,等待下一次被利用。

附錄

[1]https://itnext.io/explain-to-me-go-concurrency-worker-pool-pattern-like-im-five-e5f1be71e2b0#fe56

 

責任編輯:武曉燕 來源: 吳親強的深夜食堂
相關推薦

2023-02-26 01:37:57

goORM代碼

2024-04-11 08:30:05

JavaScript數組函數

2016-12-07 17:45:44

Linux文件

2022-09-20 08:43:37

Go編程語言Web

2021-09-14 12:34:33

LinuxLinux終端

2019-09-10 09:12:54

2021-07-09 12:37:31

GoPython編程語言

2017-02-10 20:00:17

Linux共享目錄命令

2024-08-12 11:32:12

Go語言程序

2016-11-22 19:37:54

Linux恢復文件

2021-02-15 17:29:46

LinuxShell腳本

2022-08-14 08:29:21

npmNode

2018-12-09 14:20:05

LinuxPDF移除密碼

2020-08-24 08:07:32

Node.js文件函數

2017-06-20 12:48:55

React Nativ自定義模塊Note.js

2022-04-13 09:30:00

C++二分圖圖著色

2018-09-08 09:05:00

UbuntuLinuxIP地址

2018-11-12 10:30:03

CentOSLinux倉庫

2022-11-03 08:13:52

echo 命令Linux

2021-01-04 09:12:31

集合變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本精品网站 | 91在线视频一区 | 亚洲三区在线观看 | 中文字幕亚洲免费 | 天天躁人人躁人人躁狂躁 | 一本一道久久a久久精品综合蜜臀 | 国产精品一区二区无线 | 一区二区三区国产精品 | 91在线观看视频 | 日韩欧美三区 | 亚洲视频免费在线观看 | 天天操夜夜爽 | 户外露出一区二区三区 | 波多野结衣在线观看一区二区三区 | 狠狠综合网 | 日本不卡免费新一二三区 | 天天操天天操 | 国产精品欧美一区二区三区不卡 | 一级在线观看 | 久久国产婷婷国产香蕉 | 91视频在线 | 日韩精品久久久久 | 久久亚洲一区二区三区四区 | 中文字幕乱码亚洲精品一区 | 国产成人免费视频网站视频社区 | 日韩欧美精品 | 久久久久久毛片免费观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲天堂中文字幕 | 免费午夜视频在线观看 | 久久草在线视频 | 免费一区二区三区 | 国产男女视频网站 | 麻豆天堂 | 老外黄色一级片 | av黄色免费 | 精品福利一区二区三区 | 精品日韩一区二区 | 偷拍自拍网站 | www..com18午夜观看 | av看片网站|