OsEngine невозможно ускорить многопоточностью в коннекторе. 98% всех задержек находятся в самих роботах. И от того, как их пишут пользователи, зависит скорость работы программы.
Так было не всегда… Были времена, когда казалось, что это не так. Но годы шли, OsEngine шлифовался и ускорялся. С модификацией Aserver, журналов и прочего всё больше становилось очевидно, что задержки именно в роботах.
На сегодняшний момент, даже подписка на 200 или 400 бумаг не ложат стандартную поточную архитектуру сервера, предложенную ниже.
Поэтому делаем, как тут написано. Время экспериментов закончено.
Полный и достаточный список потоков, которые могут и должны быть в любом сервере:
Никакие другие потоки создавать не нужно. Только если этого требует само АПИ. Плюс, это должен быть THREAD, а не Task.
Это сделано исключительно из-за того, что молодые программисты начинают делать гирлянду из асинхронных вызовов. Лучше не использовать данный подход к программированию коннекторов совсем. Не припомню ни одного случая, когда бы мне не пришлось переписывать код коннектора, в котором были Task и async.
Напомню, что ускорить процесс работы программы не выйдет. Однако, запросто можно сделать коннектор нерабочим, неподдерживаемым.
Если в коннекторе зачем-то в юзингах указан Threading.Tasks, такой коннектор принят не будет.
Это очень важное правило. Не заставляйте поток спать, когда в очереди есть данные. Это трудноуловимая логическая ошибка, которая приведёт к потере скорости у людей, которые торгуют очень много источников одновременно.
Если кол-во очередей не ограничено одной, следует разбирать очереди, начиная с ордеров.
Что почитать?
Пост из серии «Коннекторы к OsEngine»
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Что дает Sleep на 1 миллисекунду, и почему без него не обойтись?
Пока очередь пуста все равно по циклу ждем, зачем еще милисекунду добавлять ожидания?
Я спрашиваю, чтоб как то новичкам понять назначение строк кода.
Если Sleep не будет. Поток будет полностью одно ядро ПК грузить на 100 %.
Т.е. если у Вас 4 ядра — загрузка будет 25%. Если 2 ядра — то 50%. В общем, лишняя работа и нагрузка на ЦП.
Надо обязательно Sleep ставить.
Конечно это ХОРОШАЯ практика. Абсолютно законная и прекрасная, когда над проектом работают ТОЛЬКО высококвалифицированные программисты.
Над нашим проектом работают люди с разной квалификацией, поэтом это просто будет запрещено.