Как стать автором
Обновить

Комментарии 30

НЛО прилетело и опубликовало эту надпись здесь
Busy wait — это общее название техники, когда процесс/поток не блокируется, а просто в цикле проверяет наступление какого-то условия. Из плюсов — очень низкие задержки. Из минусов — потребляется 100% процессорного времени. Busy wait
Ответ на вопрос: да, никаких дополнительных изменений в коде, просто меняется последний параметр у epoll().
Конечно, это не продакшн-решение, но очень сильно уменьшало задержки.

Кажется, что там почти всё не продакшн-решение.
Но за статью спасибо. Было очень интересно читать. Вы отлично пишете.
Это было море удовольствия! Спасибо!
Спорткары тоже не очень предназначены для обычных дорог) Такова уж суть любого спорта. Однако надеюсь, в следующий раз все используемые сейчас уловки будут учтены, дабы максимально приблизить соревнование к реальности
Спорткары, в которых топлива только на один круг и все повороты левые :)
Ну, если не на круг, а на гонку (или ее часть), то как раз примерно F1 получится
а можно на этом яндекс-танке свой серверный движок поганять? может есть где описание как это сделать?
Я c танком не разбирался и локально не использовал, но его точно можно использовать для своего проекта. Наверно этот вопрос стоит начать изучать с оф документации на гитхабе.
Было действительно здорово, помню свои эмоции, когда в четыре утра воскресенья поднялся на десятое место (в первом раунде).
image
Дальше уже было понятно, что принципиально улучшить к финалу я ничего не успею и дальше буду только падать.
Ну хоть в финальную выборку вошёл, уже хорошо :)
НЛО прилетело и опубликовало эту надпись здесь
Там можно писать все, что угодно :)
У одного из участников в топ-10 было написано php + что-то, но реально там был С/С++.
НЛО прилетело и опубликовало эту надпись здесь
Деморализации
>У одного из участников в топ-10 было написано php
ещё хлеще, там было кажется что-то типа «вордпресс» :)
А лучшее решение на php сейчас — это 89 место с результатом 293 секунды, Виталий Дятлов xytop со стеком "(PHP, MySQL+Memcache, Lightttpd)".

Не знаю как ему удалось добиться таких результатов с таким стеком. У меня «php + shared memory» и мне удалось получить только 404 секунды. Хотя есть ещё куда оптимизировать.

Там C+nxweb (а в первом туре еще whitedb для базы было).
Это я зашифровался так :)

Нехорошо обманывать.
В подобных спортивных соревнованиях есть особенность. Для достижения максимальной эффективности приходится делать много допущений и упрощений, писать код так, чтобы он был эффективным, не принимая во внимание его дальнейшую поддерживаемость.
Т.е. выигрывает не подход, когда пишется эффективный код, который можно легко доработать в дальнейшем, а подход «сделать одноразовый сервис». Наверное, в условиях mail.ru поиск кадров, способных на такое, оправдан (из-за количества серверов разработчик «одноразовых» высокоэффективных сервисов будет дешевле — даже если их придется время от времени писать с нуля при необходимости что-то поменять). Но на массовом рынке это не такая уж важная фича.
Ну, как бы для прикладной задачи решение под-ключ почти всегда плохо обслуживается, но максимально направлено на выполнение условий. Последующая оптимизация, как-правило, вызывает погрешности в решении поставленных задач. Например, если речь идёт только о скорости обработки запроса, то решение будет исключать универсальность, возможность повторного использования и обработку кастомных параметров. Когда добавляется необходимость перестроить решение под другие сервисы, добавляются настройки и интерфейсы, загрузка которых съедает ресурс и скорость обработки запроса снижается. Полагаю, что если будет стоять задача сохранения скорости при обработке сотни различных параметров, срок разработки увеличится с недели до нескольких месяцев, или даже лет. В коммерческом плане, разумеется, никто не будет платить программисту за такое решение. Будет проще написать по велосипеду на каждый юзкейс, либо, если стоит задача разработки универсального обработчика, поступиться параметрами скорости обработки.
В качестве библиотеки для разработки http-сервиса рассматривал несколько решений и пока не нашел для себя ничего лучше, чем libevent (ее поддержку http). Не смотря на ее C'шное а не C++ API производительность и удобство использования дают хорошее сочетание.
Не рассматривали libevent, а если да, то чем она уступила иным решениям?

Некоторое время назад так же в качестве почти «тестового задания» писал http-сервер на epoll. Производительность по сравнению с готовыми решениями, например, тем же libevent лучше, но много нюансов… Не смотря на большую собственную лояльность к «своим решениям», пришел к заключению, что писать http-сервер с помощью epoll — это крайняя мера.
libevent не рассматривал по двум причинам:
1. Я про не знал (но теперь знаю)
2. Когда дело дошло до сокетов и epoll, время поджимало, и мне было проще сделать это все руками.
И я полностью согласен, что если делать не решение, заточенное под конкретный конкурс, то сторонние библиотеки/сервера будут лучше. Хотя бы потому, что их уже не нужно писать и тестировать.
Как известно, 20% кода занимают 80% времени.

И кажется, конкретно в этом случае выстрелило сочетание epoll + busy wait, и все остальные реализации заведомо проигрывали.
Спасибо за статью! Обязательно будем делать следующий :)
Поздравляю 8)

Когда начал читать статью первой мыслью было «круто я тоже хочу».
Но когда дочитал честно говоря был разочарован: какой практический толк от всего этого? Высокая нагрузка мне интересна и знаю я о таких вещах не по наслышке, но в этом соревновании чистая синтетика.
Это всегда проблема подобных соревнований: либо синтетика, либо очень сложно как для участников, так и для организаторов. Конкретно в этом случае я соглашусь: толку нет, потому что это было тестовое соревнование на попробовать, взлетит или нет, и по словам организаторов, они рассчитывали на 100 человек, а в итоге было 400+ решений в рейтинге.

Вот тут участники своими идеями делятся на будущее: github.com/sat2707/hlcupdocs/issues/94
Видимо у меня несколько иной склад ума. Я не могу себя заставить делать то, что не принесет практической пользы. Мне бы БД, да потолще, да с проблемами побольше)
НЛО прилетело и опубликовало эту надпись здесь
Да, уже в прошлом. Можно пробовать в следующий раз :)
Хотя песочница еще вроде работает, можно попробовать.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории