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处理程序不控制任务执行,而是按顺序执行循环。
也就是说,处理程序缺乏异步任务执行的机制。

 

每个人都谷歌一下僵局的概念!

在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。

通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。

知道1C的人不被认为是程序员。MQL5的情况也是如此。

 
Roffild:

每个人都谷歌一下僵局的概念!

在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。

通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确选择工具。

知道1C的人不被认为是程序员。MQL5的情况也是如此。

如果多线程的MQL程序破坏了测试系统,那么不管是通过DLL还是普通的DLL连接,都有什么区别?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。
 
Roffild:

每个人都谷歌一下僵局的概念!

在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。

通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。

知道1C的人不被认为是程序员。MQL5的情况也是如此。

在测试时,所有的任务都可以逐一解决,结果可以在某些时刻返回(你可以在测试器中等待)。不仅你可以,而且你必须,这样才能与现实相符。

我不知道1C的程序员们是怎么想的?他们对别人的意见感兴趣吗?

 
Реter Konow:
如果多线程的MQL程序破坏了测试系统,那么不管是通过DLL还是普通的DLL连接,又有什么区别呢?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。
一般来说,在正常模式下需要多线程。测试总是在一个小的程序模块--策略中进行,而程序的所有其他能力都有一个休息。视觉化等等。因此,在测试期间,只有策略模块所在的那个线程在运行。在测试器中,一些常规功能和事件被禁用,所以让线程也被禁用。
 
Реter Konow:
如果多线程的MQL程序破坏了测试系统,通过DLL或直接链接有什么区别?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。

这是有区别的。云中不允许使用DLLs。而DLLs本身从一开始就被禁用。通过启用DLLs的权限,你就放弃了安全执行代码的责任。

 
Roman:

EventLoop是在asyncio中实现的,我相信在其他异步库中也使用了同样的原理。
...

其他异步库不使用这一原则。

 
Dmitry Fedoseev:

其他异步库不使用这一原则。

这只是一个猜测,我没有检查过它在其他地方的使用情况。
我搜索了一下哪些语言使用EventLoop,是Py、JS、Qt,可能还有一些。
问题的关键不是在哪里应用,而是在技术本身不使用线程。
那么,为什么不借用这个技术,在mql中实现你的EventLoop呢?