rss

Профиль компании

Финансовые компании

Блог компании Os_Engine | Стандарты кода #6. Многопоточность. Task, Asуnc. Коннекторы для OsEngine #25.

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

Стандарты кода #6. Многопоточность. Task, Asуnc. Коннекторы для OsEngine #25.

Так было не всегда… Были времена, когда казалось, что это не так. Но годы шли, OsEngine шлифовался и ускорялся. С модификацией Aserver, журналов и прочего всё больше становилось очевидно, что задержки именно в роботах.

На сегодняшний момент, даже подписка на 200 или 400 бумаг не ложат стандартную поточную архитектуру сервера, предложенную ниже.

Поэтому делаем, как тут написано. Время экспериментов закончено.

 

 

Один коннектор – оптимально два потока.

 

Полный и достаточный список потоков, которые могут и должны быть в любом сервере:

  1. Проверка жизни Вёбсокета. Это поток номер один. Если есть вёбСокет, данный поток должен быть в обязательном порядке.
  2. Конвертер сообщений. Поток номер два. В бесконечном цикле занимается разбором входящих сообщений от биржи/брокера.

Никакие другие потоки создавать не нужно. Только если этого требует само АПИ. Плюс, это должен быть THREAD, а не Task.

 

 

Использование Task запрещено. Асинхронные методы запрещены.

 

Это сделано исключительно из-за того, что молодые программисты начинают делать гирлянду из асинхронных вызовов. Лучше не использовать данный подход к программированию коннекторов совсем. Не припомню ни одного случая, когда бы мне не пришлось переписывать код коннектора, в котором были Task и async.

Напомню, что ускорить процесс работы программы не выйдет. Однако, запросто можно сделать коннектор нерабочим, неподдерживаемым.

Если в коннекторе зачем-то в юзингах указан Threading.Tasks, такой коннектор принят не будет.

 

 

Поток рассылки и разбора сообщений спит, только если очередь пустая.

 

Это очень важное правило. Не заставляйте поток спать, когда в очереди есть данные. Это трудноуловимая логическая ошибка, которая приведёт к потере скорости у людей, которые торгуют очень много источников одновременно.

Стандарты кода #6. Многопоточность. Task, Asуnc. Коннекторы для OsEngine #25.

 

Поток конвертации разбирает сообщения об ордерах и myTrade в первую очередь.

Если кол-во очередей не ограничено одной, следует разбирать очереди, начиная с ордеров.

 

Что почитать?

  1. https://habr.com/ru/companies/dododev/articles/435666/
  2. https://ru.stackoverflow.com/questions/947503/task-run-антипаттерн-async-await-c

 

Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

Стандарты кода #6. Многопоточность. Task, Asуnc. Коннекторы для OsEngine #25.

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

Стандарты кода #6. Многопоточность. Task, Asуnc. Коннекторы для OsEngine #25.

★1
4 комментария

Что дает Sleep на 1 миллисекунду, и почему без него не обойтись?

Пока очередь пуста все равно по циклу ждем, зачем еще милисекунду добавлять ожидания?


Я спрашиваю, чтоб как то новичкам понять назначение строк кода.
avatar
Тихий омут, 
Если Sleep не будет. Поток будет полностью одно ядро ПК грузить на 100 %. 
Т.е. если у Вас 4 ядра — загрузка будет 25%. Если 2 ядра — то 50%. В общем, лишняя работа и нагрузка на ЦП. 
Надо обязательно Sleep ставить.
Алексей Ван <o-s-a.net>, асинхронный API даст преимущество в случае большого количества IO операций(что в данном случае ей и является — ожидания данных из сети) особенно в высоконагруженных приложениях. Да, грамотное использование данного API накладывает определенные ограничения на квалификацию разработчика, но сказать что это антипаттерн некорректно.
Дмитрий Челяпин, мы много это обсуждаем в чатике. 
Конечно это ХОРОШАЯ практика. Абсолютно законная и прекрасная, когда над проектом работают ТОЛЬКО высококвалифицированные программисты.

Над нашим проектом работают люди с разной квалификацией, поэтом это просто будет запрещено. 

теги блога Алексей Ван <o-s-a.net>

....все тэги



UPDONW
Новый дизайн