Don't start more goroutines than needed on RS input, increase input worker buffer size

This commit is contained in:
Neil Alexander 2020-12-14 10:07:30 +00:00
parent d7824ed5b1
commit 06d2961bc9
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -54,10 +54,8 @@ type inputWorker struct {
input chan *inputTask
}
// Guarded by a CAS on w.running
func (w *inputWorker) start() {
if !w.running.CAS(false, true) {
return
}
defer w.running.Store(false)
for {
select {
@ -142,7 +140,7 @@ func (r *Inputer) InputRoomEvents(
// room - the channel will be quite small as it's just pointer types.
w, _ := r.workers.LoadOrStore(roomID, &inputWorker{
r: r,
input: make(chan *inputTask, 10),
input: make(chan *inputTask, 32),
})
worker := w.(*inputWorker)
@ -156,7 +154,9 @@ func (r *Inputer) InputRoomEvents(
}
// Send the task to the worker.
go worker.start()
if worker.running.CAS(false, true) {
go worker.start()
}
worker.input <- tasks[i]
}