не могли бы уточнить, все ли события QuikTrader работают в одном
дополнительном потоке?
В примере SampleConsole событие Connected ожидает появления
инструментов (NewSecurities)
с помощью ManualResetEvent.
Получается эти два события находятся в разных потоках (иначе бы
выполнение блокировалось).
Прав ли я, что в отдельном одном дополнительном потоке исполняется DDE
сервер и, соответственно,
лишь те события QuikTrader, которые связаны с приходом данных по DDE,
а все остальные обработчики (Connected, Disconnected и т.д.) - это
основной поток?
Реализация меняется от версии к версии. Лучше на это на завязываться.
Главное - что событие могут приходить в других потоках.
Соответственно, работу с общими данные нужно синхронизировать.
Уточню, мой вопрос касается многопоточности именно в неком ядре
StockSharp (сам Trader, его обработчики).
Вопрос не касается стратегий, менеджера стратегий и т.п.
Какова здесь метафора системы? :-)
Пользуем критические секции повсеместно? или же считаем, что все
обработчики, занимающиеся получением данных от торговой системы,
работают по принципу "однопоточный I/O" (что возможно было бы
логично.. пусть следующие "уровни" распараллеливают)?
Насчет событий. Событие отправляющие поочередно. Тоесть, нет такого,
чтобы сначала пришло событие об отмене заявки, а потом об успешной
регистрации. Но пространство для маневра я хочу себе оставить. В
прошлых версиях все вызывалось из пула (а пул - это вещь вообще не
деторминированная). В текущей - все в одном потоке (не основном). В
новой версии - каждое событие в своем... Я пока не пришел к понимаю
единственно правильного. Но что будет всегда и точно - это то, что
данные, к которым идет обращение из обработчиков событий необходимо
синхронизовывать. Секциями или еще как - главное надо.
Мы используем куки для обеспечения лучшего опыта на нашем сайте. Продолжая использовать наш сайт, вы соглашаетесь на использование куки.
Комментарии (7)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
События вызываются в другом потоке.
т.е. создается всего один доп.поток и в нем вызываются обработчики?
Михаил,
не могли бы уточнить, все ли события QuikTrader работают в одном дополнительном потоке?
В примере SampleConsole событие Connected ожидает появления инструментов (NewSecurities) с помощью ManualResetEvent.
Получается эти два события находятся в разных потоках (иначе бы выполнение блокировалось).
Прав ли я, что в отдельном одном дополнительном потоке исполняется DDE сервер и, соответственно, лишь те события QuikTrader, которые связаны с приходом данных по DDE, а все остальные обработчики (Connected, Disconnected и т.д.) - это основной поток?
Реализация меняется от версии к версии. Лучше на это на завязываться. Главное - что событие могут приходить в других потоках. Соответственно, работу с общими данные нужно синхронизировать.
Уточню, мой вопрос касается многопоточности именно в неком ядре StockSharp (сам Trader, его обработчики). Вопрос не касается стратегий, менеджера стратегий и т.п.
Какова здесь метафора системы? :-) Пользуем критические секции повсеместно? или же считаем, что все обработчики, занимающиеся получением данных от торговой системы, работают по принципу "однопоточный I/O" (что возможно было бы логично.. пусть следующие "уровни" распараллеливают)?
Возник еще один вопрос. Являются ли методы и свойства QuikTrader thread-safe?
Да, потокобезопасно.
Насчет событий. Событие отправляющие поочередно. Тоесть, нет такого, чтобы сначала пришло событие об отмене заявки, а потом об успешной регистрации. Но пространство для маневра я хочу себе оставить. В прошлых версиях все вызывалось из пула (а пул - это вещь вообще не деторминированная). В текущей - все в одном потоке (не основном). В новой версии - каждое событие в своем... Я пока не пришел к понимаю единственно правильного. Но что будет всегда и точно - это то, что данные, к которым идет обращение из обработчиков событий необходимо синхронизовывать. Секциями или еще как - главное надо.