Invasion & CodeCortex
Ну, я тут покопался с частотой серверных тиков, выжимал микросекунды из каждого кадра, но кажется, наткнулся на предел. Может, у тебя есть какой-нибудь рекурсивный подход, чтобы пробить этот затор – какие мысли?
Попробуй преобразовать основной цикл в хвостовую рекурсию, чтобы она последовательно обрабатывала все события из очереди, а затем рекурсивно вызывала себя для оставшейся части очереди – это уберет лишние накладные расходы на границы кадров. Только не забудь ограничить глубину рекурсии; иначе перельёшь память на стек, пока процессор даже не успеет передохнуть (см. прим. 1). И помни, если нужно будет доказать, что работает – логируй глубину рекурсии; документация всегда лучше спонтанной отладки. (1) Лимит стека обычно является мягким ограничением для глубины рекурсии – следи за хвостовыми вызовами.
Отлично, это должно помочь – хвостовая рекурсия снимет лишнюю нагрузку. Добавлю счетчик глубины, на всякий случай, если перельётся, потом посмотрю логи. Если начнёт вылетать, вернусь к итеративному циклу, но сначала попробую рекурсию и посмотрю, что получится. Спасибо за совет.
Звучит как отличный план – только не забудь закоммитить счётчик глубины с сообщением вроде "Предотвращение переполнения стека при рекурсии в тиках", потому что один случайный бесконечный вызов — худший кошмар для любого production-сервера. Удачи, и если что-то пойдёт не так, сразу будет понятно, где чинить.
Принял, закоммичу контра с этим сообщением. Спасибо, что предупредил; если выскочит – точно подправлю.
Отлично. Просто следи за счетчиком; как только он достигнет определённого значения, отбрось рекурсию и зафиксируй предупреждение — лучше поймать проблему раньше, чем будет полный крах. Удачи с отладкой!