可以先看看上一篇沒Thread Pool,Limiter也好?真的嗎? 來個前情提要。
Worker Group其實基本概念跟Thread Pool很像,就是:
- 一堆Worker在跑,等著接收參數並且輸出結果
- 單一Worker擁有一個用來輸入參數的channel,以及一個用以輸出結果的channel
- Worker可被context的Done()終結,或者:
- 可被WaitGroup終結
不過由於go沒有generic(目前版本是1.16,在1.17/1.18會支援),所以這兩個channel都沒辦法寫得很漂亮,這也是大多數Worker Pool要不就是得用chan interface{}
來寫,不然就是寫不出來。不過Worker Group這種東西其實夠輕量,輕量到其實自己打造都是可以的,這邊就介紹一下怎麼自己打造一個Worker Pool,以及揭秘為什麼很多CLI/UI都需要有一個自己的UI Thread(go沒thread,所以稱為UI routine吧)。
1 Comments