OsEngine невозможно ускорить многопоточностью в коннекторе. 98% всех задержек находятся в самих роботах. И от того, как их пишут пользователи, зависит скорость работы программы.

Так было не всегда… Были времена, когда казалось, что это не так. Но годы шли, OsEngine шлифовался и ускорялся. С модификацией Aserver, журналов и прочего всё больше становилось очевидно, что задержки именно в роботах.
На сегодняшний момент, даже подписка на 200 или 400 бумаг не ложат стандартную поточную архитектуру сервера, предложенную ниже.
Поэтому делаем, как тут написано. Время экспериментов закончено.
Один коннектор – оптимально два потока.
Полный и достаточный список потоков, которые могут и должны быть в любом сервере:
- Проверка жизни Вёбсокета. Это поток номер один. Если есть вёбСокет, данный поток должен быть в обязательном порядке.
- Конвертер сообщений. Поток номер два. В бесконечном цикле занимается разбором входящих сообщений от биржи/брокера.
Никакие другие потоки создавать не нужно. Только если этого требует само АПИ. Плюс, это должен быть THREAD, а не Task.
Использование Task запрещено. Асинхронные методы запрещены.
Это сделано исключительно из-за того, что молодые программисты начинают делать гирлянду из асинхронных вызовов. Лучше не использовать данный подход к программированию коннекторов совсем. Не припомню ни одного случая, когда бы мне не пришлось переписывать код коннектора, в котором были Task и async.
Напомню, что ускорить процесс работы программы не выйдет. Однако, запросто можно сделать коннектор нерабочим, неподдерживаемым.
Если в коннекторе зачем-то в юзингах указан Threading.Tasks, такой коннектор принят не будет.
Поток рассылки и разбора сообщений спит, только если очередь пустая.
Это очень важное правило. Не заставляйте поток спать, когда в очереди есть данные. Это трудноуловимая логическая ошибка, которая приведёт к потере скорости у людей, которые торгуют очень много источников одновременно.
Поток конвертации разбирает сообщения об ордерах и myTrade в первую очередь.
Если кол-во очередей не ограничено одной, следует разбирать очереди, начиная с ордеров.
Что почитать?
- https://habr.com/ru/companies/dododev/articles/435666/
- https://ru.stackoverflow.com/questions/947503/task-run-антипаттерн-async-await-c
Пост из серии «Коннекторы к OsEngine»
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
OsEngine: https://github.com/AlexWan/OsEngine
FAQ: https://o-s-a.net/os-engine-faq
Поддержка OsEngine: https://t.me/osengine_official_support
Курилка, общаемся здесь: https://t.me/o_s_a_chat
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Подробнее https://smart-lab.ru/compan...

