Если поток, ожидая один сокет, не может делать ничего другого, то с ростом числа игроков тормозит всё.
Почему Поток ждёт чтения и записи по каждому соединению → Следствие Задержка одного соединения распространяется на другие соединения того же потока → На экране Чем выше онлайн, тем сильнее у всех слоумо и задержка ввода
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Перейти на асинхронный ввод-вывод на базе epoll, IOCP или io_uring.
На графике
Растёт вслед за онлайном и нагрузкой · время ответа, число потоков
Где смотреть
Посмотреть через pidstat -w -t число потоков игрового сервера и добровольные переключения контекста по потокам (cswch/s, сколько раз поток останавливался в ожидании ресурса) и сравнить с временем ответа в зависимости от онлайна
Подтверждает
С ростом онлайна время ответа круто растёт, потоков становится столько же, сколько соединений, и большинство из них почти не используют CPU, зато часто добровольно переключаются (ждут сокет)
Опровергает
Если потоки не ждут и постоянно загружают CPU, это перегрузка расчётами («Превышение бюджета тика»)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
epoll(7) — Linux manual pageLinux man-pages Механизм уведомлений о событиях ввода-вывода, который масштабируется на одновременное наблюдение за множеством fd
I/O Completion PortsMicrosoft Способ Windows обрабатывать множество асинхронных операций ввода-вывода заранее созданным пулом потоков
pidstat(1) — Linux manual pagesysstat cswch/s в выводе -w: добровольные переключения контекста, когда поток сам останавливается в ожидании ресурса. -t выводит данные по потокам