синхронизация функции main и колбеков

Страницы: 1
RSS
синхронизация функции main и колбеков
 
Полагаю , что останов функции main c помощью sleep неудачное решение разработчиков.
--------------------------------
Сам использую останов потока системным событием Event.
Неоднократно предлагал разработчикам реализовать останов потока системным событием Event.
Но воз и ныне там.
------------------------------
Чтобы показать наглядно эффективность предлагаемого способа реализовал следующий тест.
-----------------------
Во всех колбеках поставил счетчик вызова и старт таймера.
В функции main поставил  останов таймера и запись  в лог счетчиков событий всех колбеков и прошедшее время с момента вызова очередного колбека.
----------------------
Вот фрагмент лог файла:
...
93>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15784,95846,0
83>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15784,95847,0
90>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15784,95848,0
129>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15785,95848,0
110>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15786,95848,0
261>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15786,95850,0
431>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15786,95850,0
88>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15786,95851,0
85>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15786,95852,0
131>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15787,95852,0
113>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15788,95852,0
162>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15788,95853,0
91>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15788,95854,0
93>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15789,95854,0
294>0,0,0,0,11,11,0,0,0,0,0,0,0,0,15789,95855,0
....
На первой позиции время в микросекундах, прошедшее с момента вызова терминалом колбека до момента активации потока main скрипта.
далее через запятую счетчики вызова колбеков.
--------------------------------------------
Как видно из лог файла это время составляет примерно 100 мкс (компьютер слабый, WIN XP).  
--------------------------
Получается, что использование функции sleep либо приведет к постоянной активации потока и бесполезной загрузки ядра,
либо к пропуску завершения работы колбеков.
Обе ситуации плохо.
 
В предыдущем тесте в вычислении времени включено время преобразования значений счетчиков в строку
Поэтому время немного завышено
Вот показания лог файла чистой задержки активации main колбеком:
....
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,37,0
31>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,37,0
22>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,38,0
23>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,39,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,40,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,41,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,42,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,43,0
23>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,44,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,45,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,46,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,47,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,48,0
33>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,49,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,50,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,51,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,52,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,53,0
20>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,54,0
21>0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,55,0
28>0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,55,0
...
Т е это время менее 30 мкс .
 
При этом запуск теста на загрузке процессора отражается слабо (я особо  не заметил). загрузка процессора в среднем 10%.
 
sleep позволяет усыпить main не менее чем на 1 ms что примерно в 50 раз больше времени активации main колбеком.
Но чтобы ядро не грело воздух зря, надо ставить sleep на 100 ms.
А это уже в 5000 раз больше времени активации main.
---------------------
кроме того, интервал прихода информации с сервера брокера составляет примерно 70 ms (у меня)
Поэтому при sleep 100 ms может не только пропускать колбеки, но и создать затор поступающей информации с торгов.
т е легко получить тормознутый робот.
------------------
 
сделал библиотеку на луа для работы с системными событиями.
Если надо, стучите.
 
nikolz, А я полагаю, что останов функции main c помощью sleep вполне нормальное решение разработчиков. Во всяком случае, оно намного лучше некоторых других их решений, про которые я не раз говорил.

Чтобы показать полную ненужность предлагаемого способа никаких тестов не проводил, а тупо заглянул в свои логи - они у меня (на этом компе) ведутся с середины апреля, так я взял период с 1 мая по 31 августа и тупо посчитал количество вызовов коллбеков за всё это время. Получилось 5037 у одного брокера и 2081 у другого. Правда, цифры эти надобно умножить на 3, поскольку прерывания OnTtade приходят пачками, но и в этом случае цифры смехотворно малы. За всё время моей работы в Квике никакой "постоянной активации потока и бесполезной загрузки ядра", равно как и "пропусков завершения работы колбеков" ни разу не заметил. Опять микросекунды ловим? Ну-ну... когда коту делать нечего... Так что "библиотеку" свою засуньте... сами знаете куда.
Страницы: 1
Читают тему
Наверх