Don't start more goroutines than needed on RS input, increase input worker buffer size
MODIFY
roomserver/internal/input/input.go
roomserver/internal/input/input.go
@@ -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.
+ if worker.running.CAS(false, true) {
go worker.start()
+ }
worker.input <- tasks[i]
}

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