Архив метки: latency

Что надо знать программисту об устройстве современного процессора

Данная статья — всего лишь краткое введение в основные концепции устройства современного процессора. Цель статьи — дать основы, чтобы при объяснении каких-то нюансов в других статья я не повторялся. Все отсылки из тех статей к техническим подробностям и деталям будут вести сюда.

Читать далее

Что такое tick-to-trade и как его замерять

В предыдущих статьях я рассказывал о том, как важно чтобы торговое приложение работало быстро, но не менее важно, как быстро оно способно принимать исходные данные и передавать результаты в сеть.

Например, приложение автоматизированной торговли слушает поток market data, анализирует его и в случае благоприятной комбинации сигналов отправляет на биржу приказ о продаже или покупке определенного финансового инструмента. Или несколько приказов. Время, прошедшее с момента поступления события в рыночных данных до момента, когда приказ сформирован закодирован и вытолкнут в сеть называется tick-to-trade. В кратце, это скорость реакции вашей системы на заданное ключевое событие.

Читать далее

Как работает маркет-мейкинг

Цель данной статьи рассказать о том, что такое маркет-мейкинг (market making), какую роль он играет в электронной биржевой торговле, и о его связи с автоматизированной торговлей, HFT, программированием, и компьютерными технологиями.

Читать далее

Принципы написания торговых low-latency приложений на Java

Данная статья является частью серии статей о том, как пишутся low-latency торговые приложения. Вводная статья содержит начальные сведения о подходах к оптимизациям вообще, вторая статья рассказывает об подходах к оптимизации на всех уровнях торговой системы: от железа до настройки JVM. Данная же статья, рассказывает уже подробно об оптимизациях в самом Java-приложении.

Статья ориентирована на программистов, чтобы помочь им в изучении Java, понимании JVM и развитии навыков программирования.

Читать далее

Пулы объектов для достижения высокой производительности в Java

В торговых приложениях создается множество объектов в реальном времени. Скажем, каждый новый ордер от клиента создает объект Order. Исполнение ордера на рынке порождает новый объект Fill или Partial Fill. И если поток ордеров очень высок во время активного торгового дня, это создание новых объектов оказывает:

  • большую нагрузку на JVM по созданию новых экземпляров объектов из классов;
  • большую нагрузку на память, для записи всех этих объектов в heap;
  • большую нагрузку на сборщик мусора, который должен постоянно отслеживать появление этих новых объектов и проверять, не стали ли они мусором.

Все эти операции имеют большие накладные расходы сами по себе, плюс могут привести к непредсказуемым задержкам, поэтому Java-программисты нашли обходное решение этой проблемы: использовать пулы заранее созданных объектов (object pools). Т.е. переиспользовать объекты, которые уже не нужны, вместо создания новых.

Читать далее