mirror of
https://github.com/crazybber/awesome-patterns.git
synced 2024-11-22 12:46:03 +03:00
[fanout] Optimize fanout
This commit is contained in:
parent
9c0c9709ff
commit
44115024e2
@ -22,21 +22,21 @@ type Pipeline struct {
|
|||||||
chain chan interface{}
|
chain chan interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Pipeline) Start() {
|
func (p *Pipeline) Start(ctx context.Context) {
|
||||||
go func(pipe *Pipeline) {
|
go func(pipe *Pipeline) {
|
||||||
for {
|
for {
|
||||||
expectationWorkers := len(pipe.chain)
|
expectationWorkers := len(pipe.chain) % MaxWorkers
|
||||||
if expectationWorkers > MaxWorkers {
|
if expectationWorkers >= MaxWorkers {
|
||||||
expectationWorkers = expectationWorkers % MaxWorkers
|
expectationWorkers = 0
|
||||||
}
|
|
||||||
for _, c := range pipe.workers {
|
|
||||||
if expectationWorkers < int(c.index) {
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case val := <-pipe.chain:
|
case <-ctx.Done():
|
||||||
go c.stream(val)
|
return
|
||||||
|
case val, ok := <-pipe.chain:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
go pipe.workers[expectationWorkers].stream(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}(p)
|
}(p)
|
||||||
|
Loading…
Reference in New Issue
Block a user