golang 限流器,控制併發,執行緒池
gowp
golang worker pool ,執行緒池 , 工作池
- 併發限制 goroutine 池。
- 限制任務執行的併發性,而不是排隊的任務數。
- 無論排隊多少任務,都不會阻止提交任務。
- 通過佇列支援
- 限流器
- golang 工作池公共庫
支援最大任務數, 放到工作池裡面 並等待全部完成
package main
import (
"fmt"
"time"
"github.com/xxjwxc/gowp/workerpool"
)
func main() {
wp := workerpool.New(10) //設定最大執行緒數
for i := 0; i < 20; i++ { //開啟20個請求
ii := i
wp.Do(func() error {
for j := 0; j < 10; j++ { //每次列印0-10的值
fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
time.Sleep(1 * time.Second)
}
//time.Sleep(1 * time.Second)
return nil
})
}
wp.Wait()
fmt.Println("down")
}
限流器 (cache)
package main
import (
"fmt"
"sync"
"time"
"github.com/xxjwxc/gowp/limiter"
)
func main() {
limiter := limiter.NewLimiter(limiter.WithLimit(10), limiter.WithNamespace("test"), limiter.WithTsTimeout(true) /*, limiter.WithRedis(res)*/)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go func() {
defer wg.Done()
token, _ := limiter.Acquire(10) // 獲取一個
fmt.Println(token)
time.Sleep(1 * time.Second)
limiter.Release(token) // 回退
}()
}
wg.Wait()
fmt.Println("down")
}
限流器 (redis)
package main
import (
"fmt"
"sync"
"time"
"github.com/xxjwxc/gowp/limiter"
"github.com/xxjwxc/public/myredis"
)
func main() {
conf := myredis.InitRedis(myredis.WithAddr("127.0.0.1:6379"), myredis.WithPwd("123456"), myredis.WithGroupName("test"))
res, err := myredis.NewRedis(conf)
if err != nil {
fmt.Println(err)
return
}
limiter := limiter.NewLimiter(limiter.WithRedis(res), limiter.WithLimit(10), limiter.WithNamespace("test") /*, limiter.WithRedis(res)*/)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go func() {
defer wg.Done()
token, _ := limiter.Acquire(10) // 獲取一個
fmt.Println(token)
time.Sleep(1 * time.Second)
limiter.Release(token) // 回退
}()
}
wg.Wait()
fmt.Println("down")
}
程式碼地址 gowp
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- Java併發系列 — 執行緒池Java執行緒
- 聊聊併發(五)——執行緒池執行緒
- golang workpool,工作池,執行緒池Golang執行緒
- 66.QT-執行緒併發、QTcpServer併發、QThreadPool執行緒池QT執行緒TCPServerthread
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java併發——執行緒池ThreadPoolExecutorJava執行緒thread
- Java併發 之 執行緒池系列 (1) 讓多執行緒不再坑爹的執行緒池Java執行緒
- Java併發基礎(2)------執行緒池Java執行緒
- java併發程式設計——執行緒池Java程式設計執行緒
- Java併發 之 執行緒池系列 (2) 使用ThreadPoolExecutor構造執行緒池Java執行緒thread
- ]淺談幾種伺服器端模型——多執行緒併發式(執行緒池)伺服器模型執行緒
- 併發07--執行緒池及Executor框架執行緒框架
- 併發程式設計之:執行緒池(一)程式設計執行緒
- 20170526-27關於GCD控制執行緒併發數,多執行緒併發數控制GC執行緒
- Python 併發程式設計之執行緒池/程式池Python程式設計執行緒
- Python併發程式設計之執行緒池/程式池Python程式設計執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 五、併發控制(1):執行緒的互斥執行緒
- 高併發面試:執行緒池的七大引數?手寫一個執行緒池?面試執行緒
- Java併發程式設計:執行緒池ThreadPoolExecutorJava程式設計執行緒thread
- Java 併發程式設計 | 執行緒池詳解Java程式設計執行緒
- 併發程式設計之:深入解析執行緒池程式設計執行緒
- 深入併發之(四) 執行緒池詳細分析執行緒
- 學好執行緒池,搞定高併發!(文末福利)執行緒
- java併發程式設計:執行緒池的使用Java程式設計執行緒
- Android高併發問題處理和執行緒池ThreadPool執行緒池原始碼分析Android執行緒thread原始碼
- 【重學Java】多執行緒進階(執行緒池、原子性、併發工具類)Java執行緒
- Go高效併發 10 | Context:多執行緒併發控制神器GoContext執行緒
- 併發工具類(三)控制併發執行緒的數量 Semphore執行緒
- Java併發包中執行緒池ThreadPoolExecutor原理探究Java執行緒thread
- 《java併發程式設計的藝術》執行緒池Java程式設計執行緒
- Java併發程式設計——深入理解執行緒池Java程式設計執行緒
- 解密TaurusDB儲存端高併發之執行緒池解密執行緒
- 使用concurrent.futures模組併發,實現程式池、執行緒池執行緒
- epoll程式設計,單epoll+執行緒池?執行緒池+epoll?nginx實現高併發的原理?程式設計執行緒Nginx
- 詳解Java執行緒池的ctl(執行緒池控制狀態)【原始碼分析】Java執行緒原始碼
- 深入理解Java多執行緒與併發框(第⑪篇)——執行緒池引數Java執行緒