mirror of https://github.com/nyancrimew/goop.git
Fix concurrency limiting?
This commit is contained in:
parent
bcd80689e2
commit
5f332115ff
|
@ -1,43 +1,31 @@
|
|||
// a thing that at least in theory limits concurrency, but i honestly have no clue if it works
|
||||
package stopandgo
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type StopAndGo struct {
|
||||
wg sync.WaitGroup
|
||||
wg sync.WaitGroup
|
||||
maxConcurrency int
|
||||
n int32
|
||||
guard chan struct{}
|
||||
}
|
||||
|
||||
func NewStopAndGo(max int) *StopAndGo {
|
||||
return &StopAndGo{
|
||||
maxConcurrency: max,
|
||||
guard: make(chan struct{}, max),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *StopAndGo) check() {
|
||||
if int(atomic.LoadInt32(&s.n)) >= s.maxConcurrency {
|
||||
s.Wait()
|
||||
}
|
||||
}
|
||||
|
||||
func (s *StopAndGo) AddN(n int32) {
|
||||
atomic.AddInt32(&s.n, n)
|
||||
s.wg.Add(int(n))
|
||||
// check on a new, separate goroutine so we don't lock everything up
|
||||
go s.check()
|
||||
}
|
||||
|
||||
func (s *StopAndGo) Add() {
|
||||
s.AddN(1)
|
||||
s.wg.Add(1)
|
||||
s.guard <- struct{}{}
|
||||
}
|
||||
|
||||
func (s *StopAndGo) Done () {
|
||||
atomic.AddInt32(&s.n, -1)
|
||||
func (s *StopAndGo) Done() {
|
||||
s.wg.Done()
|
||||
<-s.guard
|
||||
}
|
||||
|
||||
func (s *StopAndGo) Wait() {
|
||||
|
|
|
@ -24,10 +24,10 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
const maxConcurrency = 40
|
||||
const maxConcurrency = 250
|
||||
|
||||
var c = &fasthttp.Client{
|
||||
MaxConnsPerHost: 5000,//utils.MaxInt(maxConcurrency + 250, fasthttp.DefaultMaxConnsPerHost),
|
||||
MaxConnsPerHost: utils.MaxInt(maxConcurrency + 250, fasthttp.DefaultMaxConnsPerHost),
|
||||
TLSConfig: &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue