Asynchrone und mehrfädige Programmierung in MQL - Seite 8

 
Dmitry Fedoseev:

Es scheint, dass der besondere Unterschied zwischen Asynchronie und Multithreading aus demselben Bereich stammt wie das Problem der Zeiger-/Referenzunterschiede, das einige Leute plagt.

Die Asynchronität wird durch einen separaten Thread realisiert, und es ist nicht so wichtig, ob dieser Prozess vom Prozessor oder einem anderen Gerät bereitgestellt wird. Die Erstellung eines Prozesses impliziert seine Asynchronität, da er parallel existiert.

Die Asynchronität wird im selben Programmausführungsthread durch EventLoop implementiert, aber wie EventLoop implementiert wird, ist das Vorrecht des Entwicklers, wie er es implementiert.
Die gleichen Standard-Handler in mql, zum Beispiel OnTimer arbeitet in seiner eigenen Schleife, und dies ist eine Art von EventLoop,
Wenn Sie einen separaten Handler für asynchrone Methoden erstellen möchten, werden alle Aufgaben in einer asynchronen Schleife ausgeführt.

 
Roman:

Die Asynchronität wird im gleichen Programmausführungs-Thread durch EventLoop implementiert, aber wie EventLoop implementiert wird, ist das Vorrecht der Entwickler, wie sie es implementieren.
Die gleichen Standard-Handler in mql, zum Beispiel OnTimer arbeitet in seiner eigenen Schleife, dies ist eine Art EventLoop,
Wenn Sie einen separaten Handler für asynchrone Methoden erstellen möchten, werden alle Aufgaben in einer asynchronen Schleife ausgeführt.

Entschuldigung, wo ist Asynchronität über EventLoop implementiert?

So etwas wie EventLoop kann man jetzt selbst machen, Terminalentwickler werden hier überhaupt nicht gebraucht.

 
Dmitry Fedoseev:

Entschuldigung, wo ist Asynchronität über EventLoop implementiert?

So etwas wie EventLoop können Sie jetzt selbst machen, die Terminalentwickler werden hier überhaupt nicht gebraucht.

EventLoop ist in asyncio implementiert, und wie ich denke, wird das gleiche Prinzip in anderen asynchronen Bibliotheken verwendet.
Sogar WinAPI, so wie ich es verstehe, verwendet das Ereignisprinzip für Asynchronität.
Wir können derzeit keinen vollwertigen asynchronen Modus mit Standardwerkzeugen implementieren,
Der Grund dafür ist, dass z. B. der OnTimer-Handler die Task-Ausführung nicht steuert und stattdessen die Schleife sequentiell ausführt.
Das heißt, der Handler verfügt nicht über den Mechanismus der asynchronen Aufgabenausführung.

 

Googeln Sie doch mal den Begriff "Deadlock"!

In MQL5 wird das Hinzufügen von Threads das Testsystem zerstören und die gesamte Agentenwolke wird abstürzen.

Eine Umgehung dieser Einschränkung ist mit DLLs möglich. Wenn Sie nicht C#, C++, C oder Python lernen wollen, ist das Ihr Problem. In der heutigen Welt muss ein Programmierer mehrere Sprachen beherrschen, um das richtige Werkzeug für eine bestimmte Aufgabe auszuwählen.

Diejenigen, die 1C kennen, gelten nicht als Programmierer. Das Gleiche gilt für MQL5.

 
Roffild:

Googeln Sie doch mal den Begriff "Deadlock"!

In MQL5 wird das Hinzufügen von Threads das Testsystem zerstören und die gesamte Agentenwolke wird abstürzen.

Eine Umgehung dieser Einschränkung ist mit DLLs möglich. Wenn Sie nicht C#, C++, C oder Python lernen wollen, ist das Ihr Problem. In der heutigen Welt muss ein Programmierer mehrere Sprachen beherrschen, um das richtige Werkzeug für eine bestimmte Aufgabe auszuwählen.

Diejenigen, die 1C kennen, gelten nicht als Programmierer. Das Gleiche gilt für MQL5.

Wenn Multi-Threaded MQL-Programm bricht das Testsystem, dann welchen Unterschied macht es, ob es durch eine DLL oder eine regelmäßige angeschlossen ist? In jedem Fall müssen Sie sich zwischen Testen und Multithreading entscheiden. Aber es ist besser, innerhalb von MQL zu wählen, denn die Integrität ist ein Plus für das Programm.
 
Roffild:

Googeln Sie doch mal den Begriff "Deadlock"!

In MQL5 wird das Hinzufügen von Threads das Testsystem zerstören und die gesamte Agentenwolke wird abstürzen.

Eine Umgehung dieser Einschränkung ist mit DLLs möglich. Wenn Sie nicht C#, C++, C oder Python lernen wollen, ist das Ihr Problem. In der heutigen Welt muss ein Programmierer mehrere Sprachen beherrschen, um das richtige Werkzeug für eine bestimmte Aufgabe auszuwählen.

Diejenigen, die 1C kennen, gelten nicht als Programmierer. Das Gleiche gilt für MQL5.

Während der Prüfung können alle Aufgaben nacheinander gelöst und die Ergebnisse zu bestimmten Zeitpunkten zurückgegeben werden (Sie können im Prüfgerät warten). Man kann nicht nur, man muss, damit es der Realität entspricht.

Ich frage mich, was die 1C-Programmierer darüber denken? Sind sie an der Meinung anderer interessiert?

 
Реter Konow:
Wenn Multi-Threaded MQL-Programm bricht das Testsystem, dann welchen Unterschied macht es, ob es durch eine DLL oder eine reguläre angeschlossen ist? In jedem Fall müssen Sie sich zwischen Testen und Multithreading entscheiden. Aber es ist besser, innerhalb von MQL zu wählen, denn die Integrität ist ein Plus für das Programm.
Im Normalfall ist Multi-Threading im Normalmodus erforderlich. Der Test arbeitet immer mit einem kleinen Programmmodul - einer Strategie, und alle anderen Fähigkeiten des Programms haben einen Rest. Visualisierung und so weiter. Während des Tests läuft also nur der Thread, in dem sich das Strategiemodul befindet. Im Tester sind einige reguläre Funktionen und Ereignisse deaktiviert, also sollten auch die Threads deaktiviert sein.
 
Реter Konow:
Wenn ein MQL-Programm mit mehreren Threads das Testsystem zerstört, welchen Unterschied macht es dann, ob es über eine DLL oder direkt verlinkt ist? In jedem Fall müssen Sie sich zwischen Testen und Multithreading entscheiden. Aber es ist besser, innerhalb von MQL zu wählen, denn die Integrität ist ein Plus für das Programm.

Es gibt einen Unterschied. DLLs sind in der Cloud nicht erlaubt. Und die DLLs selbst sind von Anfang an deaktiviert. Wenn Sie die Berechtigung für DLLs aktivieren, geben Sie die Verantwortung für die sichere Codeausführung ab.

 
Roman:

EventLoop ist in Asyncio implementiert, und ich glaube, dass das gleiche Prinzip auch in anderen asynchronen Bibliotheken verwendet wird.
...

Andere asynchrone Bibliotheken verwenden dieses Prinzip nicht.

 
Dmitry Fedoseev:

Andere asynchrone Bibliotheken verwenden dieses Prinzip nicht.

Das war nur eine Vermutung, ich habe nicht überprüft, wo es sonst noch verwendet wird.
Gegoogelt, welche Sprachen verwenden EventLoop, es ist Py, JS, Qt, wahrscheinlich einige mehr.
Es geht nicht darum, wo sie angewendet wird, sondern um die Technik selbst, ohne dass Fäden verwendet werden.
Warum also nicht die Technologie ausleihen und in mql Ihren EventLoop implementieren?

Grund der Beschwerde: