Асинхронное и многопоточное программирование в MQL - страница 8

 
Dmitry Fedoseev:

Похоже замут про про особую разницу асинхронности и многопоточности из тоже области, что и мучающая некоторых проблема разницы указателя и ссылки.

Асинхронность реализуется через отдельный поток, и не столь важно, чем обеспечивается этот процесс, процессором или любым другим устройством. А уж создание процесса, подразумевает его асинхронность, поскольку он существует параллельно. 

Асинхронность реализуется в том же потоке выполнения программы, через EventLoop, а вот как реализован EventLoop, это уже прерогатива разработчиков, как его реализовывать.
Те же стандартные обработчики в mql, к примеру OnTimer работает в своём цикле, это и есть подобие EventLoop,
допилить или создать отдельный обработчик под асинхронные методы, и все задачи будут прекрасно исполнятся в асинхронном цикле.

 
Roman:

Асинхронность реализуется в том же потоке выполнения программы, через EventLoop, а вот как реализован EventLoop, это уже прерогатива разработчиков, как его реализовывать.
Те же стандартные обработчики в mql, к примеру OnTimer работает в своём цикле, это и есть подобие EventLoop,
допилить или создать отдельный обработчик под асинхронные методы, и все задачи будут прекрасно исполнятся в асинхронном цикле.

А простите, где асинхронность реализуется через EventLoop?

Что-то подобное EventLoop вы можете сами сейчас сделать, разработчики терминала здесь вообще не нужны.

 
Dmitry Fedoseev:

А простите, где асинхронность реализуется через EventLoop?

Что-то подобное EventLoop вы можете сами сейчас сделать, разработчики терминала здесь вообще не нужны.

EventLoop реализован в asyncio, да и как мне кажется этот же принцип используется в других асинхронных библиотеках.
Да даже тот же WinAPI как я понял, для асинхронности использует событийный принцип.
Сейчас не получится штатными средствами реализовать полноценную асинхронность,
так как обработчик к примеру тот же OnTimer, не управляет выполнением задач, а выполняет цикл последовательно.
То есть в обработчике не хватает механизма выполнения асинхронных задач.

 

Всем гуглить понятие deadlock!

В MQL5 добавление потоков нарушит систему тестирования и все облако агентов ляжет.

Обход этого ограничения возможен с помощью ДЛЛки. Если не хотите изучать C#, C++, C, Python - это ваши проблемы. В современном мире программист должен знать несколько языков, чтобы правильно выбирать инструмент под конкретную задачу.

Знающих язык 1С за программистов не считают. Тоже верно и для MQL5.

 
Roffild:

Всем гуглить понятие deadlock!

В MQL5 добавление потоков нарушит систему тестирования и все облако агентов ляжет.

Обход этого ограничения возможен с помощью ДЛЛки. Если не хотите изучать C#, C++, C, Python - это ваши проблемы. В современном мире программист должен знать несколько языков, чтобы правильно выбирать инструмент под конкретную задачу.

Знающих язык 1С за программистов не считают. Тоже верно и для MQL5.

Если многопоточность MQL-программы нарушит систему тестирования, то какая разница каким боком она прикручена, через ДЛЛ или штатно? В любом случае, придется выбирать между тестированием и многопоточностью. Но, выбирать лучше внутри MQL, потому что целостность - плюс для программы.
 
Roffild:

Всем гуглить понятие deadlock!

В MQL5 добавление потоков нарушит систему тестирования и все облако агентов ляжет.

Обход этого ограничения возможен с помощью ДЛЛки. Если не хотите изучать C#, C++, C, Python - это ваши проблемы. В современном мире программист должен знать несколько языков, чтобы правильно выбирать инструмент под конкретную задачу.

Знающих язык 1С за программистов не считают. Тоже верно и для MQL5.

При тестировании можно все задачи решить по-очереди и выдать результат в определенные моменты времени (в тестере можно подождать). Не просто можно, а нужно, что бы соответствовало реальности.

Интересно, а что думают 1С программисты по этому поводу? Интересует ли их чье-то мнение?

 
Реter Konow:
Если многопоточность MQL-программы нарушит систему тестирования, то какая разница каким боком она прикручена, через ДЛЛ или штатно? В любом случае, придется выбирать между тестированием и многопоточностью. Но, выбирать лучше внутри MQL, потому что целостность - плюс для программы.
Вообще, многопоточность нужна штатная. Тестирование всегда работает с одним небольшим программным модулем - стратегией, и все остальные возможности программы отдыхают. Визуализация и прочее... Значит, пусть во время тестирования будет работать только тот поток, в котором находится модуль стратегии. В тестере же отключаются некоторые штатные функции и события, вот и потоки пусть отключаются.
 
Реter Konow:
Если многопоточность MQL-программы нарушит систему тестирования, то какая разница каким боком она прикручена, через ДЛЛ или штатно? В любом случае, придется выбирать между тестированием и многопоточностью. Но, выбирать лучше внутри MQL, потому что целостность - плюс для программы.

Разница есть. ДЛЛки запрещены в облаке. И сами ДЛЛки отключены изначально. Включая разрешение на ДЛЛки - тем самым вы отказываетесь от ответственности безопасного выполнения кода.

 
Roman:

EventLoop реализован в asyncio, да и как мне кажется этот же принцип используется в других асинхронных библиотеках.
...

В других асинхронных библиотеках используется не этот принцип.

 
Dmitry Fedoseev:

В других асинхронных библиотеках используется не этот принцип.

Это всего лишь было предположение, я не проверял где он используется ещё. 
С ходу что гуглится, в каких языках применяется EventLoop, так это Py, JS, Qt возможно ещё в каких то.
Смысл не в том где он применяется, а в самой технологии без использования потоков.
Вот и почему бы не позаимствовать технологию и реализовать в mql свой EventLoop?

Причина обращения: