Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
я не знаток. в графах. Важность определяется зависимостью начала исполнения других задач от окончания текущей. другие критерии вторичны. но есть так же время исполнения задачи. и оно тоже важнейшее среди одноранговых. В общем сложно и самая грусть, заложенный алгоритм приоритетов на ходу изменить не возможно. По хорошему, хотелось бы разьяснений от разрабов до возникновения вопросов. Сложно, но это правильная цель в развитии среды.
Выдержка из описания, как это работает в системах реального времени.
Обычно приоритеты являются динамическими, что означает, что во время исполнения они могут изменятся как самими процессами так и ОС.
Реакция на прерывания отделена от вычислений, требующих значительных ресурсов процессора.
Как только происходит событие или прерывание, его обработчик немедленно включается в очередь готовых процессов.
Программы обработчиков прерываний обычно компактны, так как они должны обеспечивать быструю реакцию,
например ввод новых данных, и передавать управление более сложным процессам, интенсивно потребляющим ресурсы процессора, которые исполняются с более низким приоритетом.
Привет Николай. Так то оно так.
Но не будет ли той же проблемы как с синхронизацией? о которой говорит Слава, то есть неоправданные тормоза.
А может и нет проблемы? )) Может просто проще не применять асинхронную модель, чем синхронизировать с приоритетами? ))
Привет.
Я не являюсь спецом в асинхронности и прерываниях, хотя кое-какие знания и опыт имеются.
В вопросе таймера вообще не должно быть проблем. Т.к. последовательность не важна, а важна периодичность. И как это отработает босс, который сидит за распределением ресурсов, совершенно не важно.
Тем более, как я понимаю, таймер построен на системных аппаратных прерываниях. Думаю вся система управления асинхронности реализована с помощью аппаратных прерываний, в том числе и от таймера.
Для меня остается открытым вопрос, насколько ресурсоемко само прерывание.
Например, наступило системное прерываниее от процессорного таймера, чтобы выполнить инкремент одной глобальной переменной. На сам этот инкремент система потратит порядка 1-й наносекунды. Но:
В общем, понимаю, что не хватает знаний и опыта. Поэтому стараюсь не лезть с вопросами к разработчикам по поводу приоритетов в асинхронности. Т.к. понимаю, что существует много нюансов, ловушек и тупиков в попытке создать безупречную систему, особенно когда дело касается торговых приказов и получение торговой информации.
Хотя, признаться честно, до сих пор не понимаю зачем они в 5-ке сделали некоторые функции асинхронными, что создает большое неудобство. Я имею ввиду ChartGet.., ChartTimePriceToXY, ChartXYToTimePrice.
Ведь логично предположить, что асинхронным должно быть заполнение таблицы состояния чарта, а сами команды должны лишь считывать данные с этой таблицы. И если данные в момент считывания будут устаревшие на несколько милисекунд, то это не проблема.
Проблема в том, что в погоне за мнимой актуальностью данных, происходят лаги в десятки милисекунд, за которые добытая актуальность становится уже неактуальной в большей степени, если бы изначально эти команды не были асинхронными, а просто они считывали бы последние известные данные таблицы состояния чарта.
И, судя по времени выполнения, эти функции в 4-ке не были асинхронными.
Выдержка из описания, как это работает в системах реального времени.
Обычно приоритеты являются динамическими, что означает, что во время исполнения они могут изменятся как самими процессами так и ОС.
Реакция на прерывания отделена от вычислений, требующих значительных ресурсов процессора.
Как только происходит событие или прерывание, его обработчик немедленно включается в очередь готовых процессов.
Программы обработчиков прерываний обычно компактны, так как они должны обеспечивать быструю реакцию,
например ввод новых данных, и передавать управление более сложным процессам, интенсивно потребляющим ресурсы процессора, которые исполняются с более низким приоритетом.
Все как я описал)))) Конечно логика приоритетов динамическая. И в этом сложноть задания уровня. задав уровень приоритета мы не можем определить срок ее выполнения в динамической логике приотиретизации в среде ниже. терминал всегда выше среды вин или линукс и не может влиять на логику приотирезации среды ниже.
Не на все поставленные вопросы предполагаю ответ.
Насколько ресурсоемко само прерывание.
Скорее всего зависит от частоты процессора.
Как долго происходит процесс по сохранению, для дальнейшего возобновления.
В соответствии с алгоритмами, основанными на квантовании, смена активного процесса происходит, если:
Как поймать момент прерывания.
Предварительный делитель – делитель частоты тактового сигнала, работающий как один или несколько последовательно соединенных T-триггеров.
Не на все поставленные вопросы предполагаю ответ.
Идите поучитесь теме (лет 10 минимум) и не мусорьте в этой ветке, пожалуйста.
Здесь с другой подготовкой и другого класса вопросы обсуждают.
ничего не происходит, начиная с 286 процессора? хз, не помню да и не разбирался с ним никогда, но точно с Пентиум-1 (по нему читал книгу, давно правда)
процессор работает в защищенном режиме, каждому процессу выделяется виртуальная память, физические адреса банков памяти (ячейки RAM) транслируются в виртуальные адреса (хотя скорее наоборот? ) самим процессором (не помню, но кажется специальный регистр и виртуальный указатель на таблицу трансляции адресов). Это аппаратное все выполняется, это не подлежит измерению, это так называемое ядро процессора, которые отличают каждую линейку процессоров Интел, это не кэш!
любая программа в Вин, должна зарегистрироваться как процесс и создать хоть один поток
затем планировщик задач Вин будет выделять ресурсы процессу и отправлять в его очередь сообщения, как работает планировщик - никогда не интересовался, мне достаточно, что приоритет процессу можно поднимать и видно, что при должном усердии ПК начинает подланивать, т.е. Майрософт дают ресурсы моему приложению, этого достаточно, чтобы не лезть в работу ОС
хз, замеры чего? прерывания это аппаратная часть, она обрабатывается ОС, ну естественно с помощью драйверов
таймер? - регистрируешь в ОС себе таймер, получаешь как обычное сообщение в очередь процесса, если не ошибаюсь, то таймер не может забить очередь сообщений, если процесс не обрабатывает их, что то на уровне защиты от дурака в ОС, гугл WM_TIMER - должно быть подробно
порядок цифр? замерить можно только такты процессора, потом Винда умножает на свой расчетный коэффициент, тут обсуждали https://www.mql5.com/ru/forum/352454#comment_18588098 , информации вагон в гугле по замерам производительности
Идите поучитесь теме (лет 10 минимум) и не мусорьте в этой ветке, пожалуйста.
Здесь с другой подготовкой и другого класса вопросы обсуждают.
Тут всех нужно отправлять, а не выборочно )) Но как всегда получает по шапке, кто задаёт адекватные вопросы.
После того как я узнал, что обработчики выполняются в блокирующем режиме, не спроста затронул эту тему.
Я реальную суть проблемы затронул, и она вам не нравится. Хорошо прекращаю эту тему.
Но смысла добиваться своевременных событий, в синхронной обработке я не вижу.
Слава, Николай, Валерий благодарю за конструктивный диалог.
ничего не происходит, начиная с 286 процессора? хз, не помню да и не разбирался с ним никогда, но точно с Пентиум-1 (по нему читал книгу, давно правда)
Это аппаратное все выполняется, это не подлежит измерению, это так называемое ядро процессора, которые отличают каждую линейку процессоров Интел, это не кэш!
Хорошо если так.
Думаю, что так и есть. Почти все на уровне железа. Иначе многопоточность не была бы столь эффективной.
Хорошо если так.
Думаю, что так и есть. Почти все на уровне железа. Иначе многопоточность не была бы столь эффективной.
только так
поиском гуглом: защищенный режим процессора
если не ошибаюсь, то защищенный режим и дает ядру ОС отдельный уровень привилегий, и по причине виртуальной памяти для каждого процесса - невозможно получить данные RAM для запущенной программы...ну разве, что под дебагером запустить как отдельный процесс....это из другой сферы знаний )))
но, однозначно все на аппаратном уровне работает, измерить это не возможно, только средствами ОС - да и переключение виртуальной памяти для процессов мгновенное, да и сам процессор работает на внутренней частоте - множитель процессора... а если начать про кэш еще думать, то... зачем? - есть задача, ищем решение! хочешь драйвер написать? осталось найти железо? )))
ЗЫ: драйвер можно написать, помню когда то TCP-логером пользовался, он как драйвер устанавливался и логировал весь трафик и потом по процессам в таблице выводил полностью весь трафик.... осталось придумать как написание драйверов поможет разработать прибыльную ТС ))))
UPD: Хабр "Что такое Protected Mode и с чем его едят" https://habr.com/ru/post/118881/
UPD: аппаратный уровень(процессор) привилегий для исполнения кода - Вики Кольца защиты
Вы всегда гарантированно будете иметь провалы на рандомных одиночных замерах любых команд, включая простейшие ассемблерные типа inc eax. Это архитектурно и объясняется физическими ограничениями "честного распределения квантов времени тысяч потоков на маленькое количество ядер".
Хватит уже тупить и продолжать ловить одиночные выбросы на миллион запросов.
Заметил, что CopyTicks лагает редко. Написал проверочный скрипт
и запустил его в стресс-режиме. Алертов у SymbolInfoTick заметно больше, чем у CopyTicks.
Без претензий. Только хотелось бы понять, что в реализациях этих функций так влияет на разное восприятие стресс-нагрузки?