Рубрика «оптимизация» - 35

Как известно, для обработки соединений NGINX использует асинхронный событийный подход. Вместо того, чтобы выделять на каждый запрос отдельный поток или процесс (как это делают серверы с традиционной архитектурой), NGINX мультиплексирует обработку множества соединений и запросов в одном рабочем процессе. Для этого применяются сокеты в неблокирующем режиме и такие эффективные методы работы с событиями, как epoll и kqueue.

За счет малого и постоянного количества полновесных потоков обработки (обычно по одному на ядро) достигается экономия памяти, а также ресурсов процессора на переключении контекстов. Все преимущества данного подхода вы можете хорошо наблюдать на примере самого NGINX, который способен обрабатывать миллионы запросов одновременно и хорошо масштабироваться.

Пулы потоков: ускоряем NGINX в 9 и более раз - 1

Каждый процесс расходует память и каждое переключение между ними требует дополнительных циклов процессора, а также приводит к вымыванию L-кэшей

У медали есть и обратная сторона. Главной проблемой асинхронного подхода, а лучше даже сказать «врагом» — являются блокирующие операции. И, к сожалению, многие авторы сторонних модулей, не понимая принципов функционирования NGINX, пытаются выполнять блокирующие операции в своих модулях. Такие операции способны полностью убить производительность NGINX и их следует избегать любой ценой.

Но даже в текущей реализации NGINX не всегда возможно избежать блокировок. И для решения данной проблемы в NGINX версии 1.7.11 был представлен новый механизм «пулов потоков». Что это такое и как его применять разберем далее, а для начала познакомимся с нашим врагом в лицо.Читать полностью »

Вот вам анекдот из конца 90-ых. Я (Dave Baggett) был одним из двух программистов (вместе с Andy Gavin), разрабатывающих Crash Bandicoot для PlayStation 1.

Ретроспектива разработки Crash Bandicoot, или как разработчики упаковывали целые игры в 2MB RAM - 1

Оперативная память была главной проблемой даже в те времена. У PS1 было всего 2MB RAM, и нам приходилось совершать безумные вещи, чтобы уместить в них игру. У нас были уровни, содержащие более 10MB чистых данных, и эти 10 мегабайт должны были постранично загружаться и выгружаться в память динамически, без каких-либо видимых задержек для игрока, при фреймрейте в 30 кадров в секунду.
Читать полностью »

Здравствуйте, дорогие читатели!

Не так давно мы занялись проработкой книги "Writing High-Performance .NET code", которая до сих пор не переведена на русский язык, хотя ей и скоро год.

Высокопроизводительный код на платформе .NET - 1

Нас, конечно, не удивило, что такую книгу уже растаскивают на цитаты, однако выяснилось, что уважаемый автор Бен Уотсон даже выложил на сайте «Codeproject» целую статью, написанную по мотивам одной из глав. К сожалению, объем этого материала слишком велик для хабропубликации, однако мы решили все-таки перевести первую часть статьи, чтобы вы могли оценить материал книги. Приглашаем к прочтению и к участию в опросе. Кроме того, если все-таки целесообразно перевести и вторую часть — пишите в комментариях, постараемся учесть ваши пожелания.
Читать полностью »

Маркетологи давно научились анализировать поведение пользователей интернет-магазинов: откуда они пришли, по каким запросам и что делали на сайте. Однако не все посетители покупают товары через онлайн-формы, кому-то удобнее сделать заказ по телефону и до недавнего времени отследить и проанализировать источники этих звонков было практически невозможно. Сегодня эту функцию выполняет коллтрекинг. О том, как с его помощью выстраивать систему аналитики звонков и оптимизировать рекламные кампании, вы узнаете в данной статье.

История
Попытки отслеживать источники звонков начались с Track ID — это технология, которая закрепляла за каждым посетителем сайта определенный номер, соответствующий его пользовательской сессии, например, код корзины или заказа. Этот номер клиент сообщал по телефону оператору колл-центра. Таким образом, маркетологи понимали, откуда посетитель пришел на сайт. Читать полностью »

Маркетологи давно научились анализировать поведение пользователей интернет-магазинов: откуда они пришли, по каким запросам и что делали на сайте. Однако не все посетители покупают товары через онлайн-формы, кому-то удобнее сделать заказ по телефону и до недавнего времени отследить и проанализировать источники этих звонков было практически невозможно. Сегодня эту функцию выполняет коллтрекинг. О том, как с его помощью выстраивать систему аналитики звонков и оптимизировать рекламные кампании, вы узнаете в данной статье.

История
Попытки отслеживать источники звонков начались с Track ID — это технология, которая закрепляла за каждым посетителем сайта определенный номер, соответствующий его пользовательской сессии, например, код корзины или заказа. Этот номер клиент сообщал по телефону оператору колл-центра. Таким образом, маркетологи понимали, откуда посетитель пришел на сайт. Читать полностью »

Традиционно одна из самых интересных секций ежегодной конференции «Яндекса» Yet another Conference on Marketing 2015 посвящена технологичным трендам. В этом году организаторы познакомили гостей с коллтрекингом. О том, как анализировать источники звонков и оптимизировать рекламные кампании, «Яндекс» пригласил рассказать Алексея Авдеева – директора по продажам Calltouch.

— Мы тщательно отбирали каждого спикера и старались сделать программу максимально содержательной – в докладах затрагиваются те технологии и инструменты, о которых должен знать каждый интернет-маркетолог, — объяснил Андрей Себрант – директор по маркетингу сервисов «Яндекс» и ведущий мероприятия.

image

Алексей Авдеев рассказал аудитории, как сервис Calltouch выделяет целевые звонки через голосовое меню или переадресацию оператора колл-центра, интегрирует эти данные с CRM и определяет, какие источники рекламы наиболее эффективны. Благодаря этому у маркетологов появляется возможность оптимизировать контекстную рекламу, выстроить грамотную SEO-стратегию, проверить конверсию разных устройств, браузеров и изменений дизайна сайта. Так, на примере одного из крупнейших российских автодилеров Calltouch продемонстрировал рост количества целевых звонков в 4,5 раза и снижение стоимости одного обращения в 3 раза.
Читать полностью »

Геймеры доказали свою пользу для верификации ПО - 1

Могут ли весёлые совместные игры в онлайне решить сложные проблемы с верификацией программного обеспечения, которыми обычно занимаются профессиональные эксперты в программировании? Другими словами, будет ли армия необразованных геймеров лучше, чем профессиональный процесс? Исследователи из Агентства по перспективным оборонным научно-исследовательским разработкам США (DARPA) уверены, что так и есть.
Читать полностью »

Закатное солнце с любопытством пялилось в монитор, бликовало, мешало. Мы с Гулей Аналитиковной уткнулись в экран носами, пытаясь разглядеть всплеск на графике установок приложения.
– Где, говоришь, у тебя реклама выходила? – Гуля сдвинулась чуть влево, перекрывая солнце.
– Вот здесь…
– Не вижу…
– Вот и я не вижу…

Записки начинающего реаниматолога. ASO - 1

Мы дружно придвинулись ближе и стукнулись головами.
– Блин! – Я потерла висок. – Так и сотрясение мозга недолго получить.
– Было бы чего сотрясать… – буркнула Гуля.
– Чего?!
– Оптимизацией страницы в магазинах, говорю, когда займешься? У тебя явно пользователи где-то в пути теряются.
Читать полностью »

Понятие факториала известно всем. Это функция, вычисляющая произведение последовательных натуральных чисел от 1 до N включительно: N! = 1 * 2 * 3 *… * N. Факториал — быстрорастущая функция, уже для небольших значений N значение N! имеет много значащих цифр.

Попробуем реализовать эту функцию на языке программирования. Очевидно, нам понадобиться язык, поддерживающий длинную арифметику. Я воспользуюсь C#, но с таким же успехом можно взять Java или Python.

Наивный алгоритм

Итак, простейшая реализация (назовем ее наивной) получается прямо из определения факториала:

static BigInteger FactNaive(int n)
{
    BigInteger r = 1;
    for (int i = 2; i <= n; ++i)
        r *= i;
    return r;            
}

На моей машине эта реализация работает примерно 1,7 секунд для N=50 000.

Далее рассмотрим алгоритмы, которые работают намного быстрее наивной реализации.
Читать полностью »

Все знают что операции создания и удаления объектов не дешевые. Например создавать каждый раз пулю и уничтожать, довольно накладно для тех же мобильных устройств. Может стоит не уничтожать пулю, а скрывать ее. Вот решил поделится своей реализацией Pool Manager. Который использую в разных проектах, в том числе и на photon server.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js