как я могу быстрее обработать сообщение об исправлении при отправке через quickfixj

У меня проблема со скоростью обработки в QuickfixJ. Я прочитал в этот вопрос, что это возможно обрабатывать 300 сообщений/сек. Я также видел в другом месте цифры, исчисляемые тысячами. Мой код сеанса Quickfix получает список сообщений и отправляет их одно за другим через Sesssion.SendToTarget();

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


person robthewolf    schedule 15.11.2011    source источник
comment
Я должен был добавить, что между каждой строкой журнала из метода toApp() требуется от 20 до 50 мс. Все, что делает toApp(), это записывает исходящее сообщение в журнал.   -  person robthewolf    schedule 15.11.2011
comment
300 сообщений/сек. Не принимайте это число за ориентир. Условия, при которых я проверял пропускную способность, могут сильно отличаться от ваших.   -  person DumbCoder    schedule 16.11.2011
comment
Это не показатель, я видел, что люди сообщали о более чем 2500 сообщениях в секунду, поэтому я думаю, что это разумно. Честно говоря, я надеялся на 750-1000. Я рад, что вы ответили, у меня есть вопрос конкретно к вам: когда вы говорите, что обработали 300 msgs/sec, вы имели в виду, что вы их отправили или получили и обработали.   -  person robthewolf    schedule 16.11.2011
comment
Это было из конца в конец. Создавайте, отправляйте и получайте подтверждение/ответ от другой стороны, мы отправляли котировки и рыночные данные, что могло немного замедлить работу из-за размера сообщения. 2500 msgs/sec — это выглядит очень высоким.   -  person DumbCoder    schedule 16.11.2011


Ответы (3)


Я видел, как QuickFIX/J обрабатывает тысячи сообщений в секунду. Однако у вас возникнут проблемы с получением такой производительности за один сеанс FIX. Сценарий, который я описываю, включал несколько сеансов. Причина, по которой это важно, заключается в том, что протокол FIX по своей сути является последовательным для каждого сеанса из-за порядковых номеров FIX. Это фактически означает, что у вас есть один поток, обрабатывающий сообщения, если у вас есть один сеанс. С несколькими сеансами механизм может использовать преимущества нескольких потоков и процессоров.

Вообще говоря, файловый ввод-вывод является основной нагрузкой. Ищите способы оптимизировать доступ к файловой системе. Если вы запустите движок без ведения журнала и MemoryStore, вы увидите, что он довольно быстрый. Я бы не стал использовать его для приложений с экстремально низкой задержкой, но это неплохо.

person Frank Smith    schedule 03.12.2011

Вход в экран сильно тормозит. С входом на экран я делал около 30-40 сообщений в секунду, а без входа я делал более 400. Так просто ничего не отображать на экране. Также медленная часть процесса — это ответ Акцептора. Инициатору удается отправить более 2000 сообщений в секунду, но ответ акцептора замедляет общий процесс.

person Jordan    schedule 10.02.2012
comment
Спасибо за этот совет, я беспокоился о том, что моя регистрация и проблема. Однако я должен куда-то войти, наверняка запись в файл такая же медленная? - person robthewolf; 12.02.2012
comment
QuickFix ведет регистрацию самостоятельно. Если вы хотите сделать свою собственную дополнительную регистрацию, вы можете подумать о каком-то другом способе расчета времени для сообщений, чтобы регистрация не влияла на него. Например, вы можете делать заказы на 1000 сообщений, время которых вы собираетесь рассчитать, затем записать все в журнал (с приостановленным таймером), затем возобновить таймер и отправить еще 1000 сообщений. Надеюсь, вы понимаете, что я имею в виду :) - person Jordan; 13.02.2012
comment
для логирования вообще, учитывая, что я сейчас логирую в файл и на экран. Повлияет ли удаление записи на экран на скорость, если я все еще записываюсь в файл? - person robthewolf; 14.02.2012
comment
Удаление логирования экрана увеличит скорость как минимум в 7-9 раз. Это ОЧЕНЬ замедляет процесс! - person Jordan; 14.02.2012

Вы создаете каждое сообщение в цикле, так как это может быть накладным? Это можно сделать асинхронно, а затем отправлять сообщения по мере их завершения. Асинхронное ведение журнала уберет эти дополнительные накладные расходы, если вы хотите убедиться, что время отправки сведено к минимуму, просто убедитесь, что все данные о времени отправляются в поток ведения журнала, чтобы они были точными при записи журналов.

person MD-Tech    schedule 15.11.2011