libevent не рассматривал по двум причинам:
1. Я про не знал (но теперь знаю)
2. Когда дело дошло до сокетов и epoll, время поджимало, и мне было проще сделать это все руками.
И я полностью согласен, что если делать не решение, заточенное под конкретный конкурс, то сторонние библиотеки/сервера будут лучше. Хотя бы потому, что их уже не нужно писать и тестировать.
Как известно, 20% кода занимают 80% времени.
И кажется, конкретно в этом случае выстрелило сочетание epoll + busy wait, и все остальные реализации заведомо проигрывали.
Это всегда проблема подобных соревнований: либо синтетика, либо очень сложно как для участников, так и для организаторов. Конкретно в этом случае я соглашусь: толку нет, потому что это было тестовое соревнование на попробовать, взлетит или нет, и по словам организаторов, они рассчитывали на 100 человек, а в итоге было 400+ решений в рейтинге.
Я c танком не разбирался и локально не использовал, но его точно можно использовать для своего проекта. Наверно этот вопрос стоит начать изучать с оф документации на гитхабе.
Busy wait — это общее название техники, когда процесс/поток не блокируется, а просто в цикле проверяет наступление какого-то условия. Из плюсов — очень низкие задержки. Из минусов — потребляется 100% процессорного времени. Busy wait
Ответ на вопрос: да, никаких дополнительных изменений в коде, просто меняется последний параметр у epoll().
Хорошая статья!
И замечание по роутингу:
Такая проверка сработает и на
/usersevil
. Конечно, неизвестно, что там скрыто вhandleGetUser()
, но лучше проверятьдлина + 1
и следующий байт.И статью от организаторов ждем :D
1. Я про не знал (но теперь знаю)
2. Когда дело дошло до сокетов и epoll, время поджимало, и мне было проще сделать это все руками.
И я полностью согласен, что если делать не решение, заточенное под конкретный конкурс, то сторонние библиотеки/сервера будут лучше. Хотя бы потому, что их уже не нужно писать и тестировать.
Как известно, 20% кода занимают 80% времени.
И кажется, конкретно в этом случае выстрелило сочетание epoll + busy wait, и все остальные реализации заведомо проигрывали.
Хотя песочница еще вроде работает, можно попробовать.
Вот тут участники своими идеями делятся на будущее: github.com/sat2707/hlcupdocs/issues/94
У одного из участников в топ-10 было написано php + что-то, но реально там был С/С++.
Ответ на вопрос: да, никаких дополнительных изменений в коде, просто меняется последний параметр у epoll().