Noch einmal zum Thema Multithreading

 
Liebe Entwickler, ich habe nach dem Thema Multithreading gesucht und den Satz gefunden, dass Sie gesagt haben, dass Sie keine Funktionen für die Erstellung und Verwaltung von Threads zu MQL5 hinzufügen werden. Das wurde vor mehr als anderthalb Jahren gesagt. Ich frage mich, ob sich Ihre Ansichten seither geändert haben?
Wenn Sie sich immer noch nicht damit befassen wollen, warum lassen Sie es dann nicht die Benutzer selbst implementieren? Dazu benötigen wir einen Funktionszeiger. Wie wäre es, eine solche Funktion hinzuzufügen? D.h. GetPointer(myfunc)

Vielleicht möchten Sie auch erläutern, warum Sie in MQL5 kein Multithreading implementiert haben und warum Sie besondere Schwierigkeiten gesehen haben? Oder war es vielleicht nur eine Frage des Prinzips?
Darf ich Sie daran erinnern, dass wir nicht mehr im Jahr 2000 leben und Multicore-Prozessoren längst zur Norm für alle geworden sind, die Anzahl der Kerne wird jedes Jahr nur noch zunehmen. Jetzt sind es 4, in ein paar Jahren werden es 6-8 sein, usw. Und Sie erlauben den Benutzern nicht, den Prozessor mit dem Programm, das sie ausführen, richtig zu nutzen.
Welchen Sinn haben dann Ihre ständigen Geschwindigkeitsvergleiche zwischen MQL und C++, wenn Sie nur die Arbeit in einem Thread vergleichen? Schließlich würde kein vernünftiger C++-Programmierer eine ressourcenintensive Aufgabe an einen Thread hängen, wenn es mehrere Prozessoren gibt, die die Leistung um ein Vielfaches steigern können. Deshalb haben alle Ihre Tests wenig Bezug zum wirklichen Leben. In ein paar Jahren wird der Prozessorkern auf 10 Kerne anwachsen und Sie werden immer noch stolz auf Ihre Single-Thread-MQL-Tests sein?

Was die Verwendung von OpenCL angeht, so ist das Schamanismus, insbesondere in der Art und Weise, wie es hier implementiert ist - über die Textzeile. Das heißt, Sie debuggen den Code irgendwo anders und kopieren ihn dann in MQL5... Was für ein Zirkus! Es wäre dann einfacher, all dies in einer DLL zu implementieren und diese zu importieren. Außerdem wollen die wenigsten Menschen ein Programm in mehreren Sprachen schreiben.
OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 
meat:
Liebe Entwickler, ich habe nach dem Thema Multithreading gesucht und einen Satz gefunden, in dem Sie sagten, dass Sie keine Funktionen zum Erstellen und Verwalten von Threads in MQL5 hinzufügen werden. Das wurde vor mehr als anderthalb Jahren gesagt. Ich frage mich, ob sich Ihre Ansichten seither geändert haben?
Wenn Sie sich immer noch nicht damit befassen wollen, warum lassen Sie es dann nicht die Benutzer selbst implementieren? Dazu benötigen wir einen Funktionszeiger. Wie wäre es, eine solche Funktion hinzuzufügen? D.h. GetPointer(myfunc)

Vielleicht möchten Sie auch erläutern, warum Sie in MQL5 kein Multithreading implementiert haben und warum Sie besondere Schwierigkeiten gesehen haben? Oder war es vielleicht nur eine Frage des Prinzips?
Darf ich Sie daran erinnern, dass wir nicht mehr im Jahr 2000 leben und Multicore-Prozessoren längst zur Norm für alle geworden sind, die Anzahl der Kerne wird jedes Jahr nur noch zunehmen. Jetzt sind es 4, in ein paar Jahren werden es 6-8 sein, usw. Und Sie erlauben den Benutzern nicht, den Prozessor mit dem Programm, das sie ausführen, richtig zu nutzen.
Welchen Sinn haben dann Ihre ständigen Geschwindigkeitsvergleiche zwischen MQL und C++, wenn Sie nur die Arbeit in einem Thread vergleichen? Schließlich würde kein vernünftiger C++-Programmierer eine ressourcenintensive Aufgabe an einen Thread hängen, wenn es mehrere Prozessoren gibt, die die Leistung um ein Vielfaches steigern können. Deshalb haben alle Ihre Tests wenig Bezug zum wirklichen Leben. In ein paar Jahren wird der Prozessorkern auf 10 Kerne anwachsen und Sie werden immer noch stolz auf Ihre Single-Thread-MQL-Tests sein?

Was die Verwendung von OpenCL angeht, so ist das Schamanismus, insbesondere in der Art und Weise, wie es hier implementiert ist - über die Textzeile. Das heißt, Sie debuggen den Code irgendwo anders und kopieren ihn dann in MQL5... Was für ein Zirkus! Es wäre dann einfacher, all dies in einer DLL zu implementieren und diese zu importieren. Außerdem wollen die wenigsten Menschen ein Programm in mehreren Sprachen schreiben.

Multithreading ist in MQL5 immer noch verfügbar, aber im Gegensatz zu C++ ist es als virtuelle Ausführungsumgebung, genannt Chart, implementiert.

Jedes Diagramm wird in einem separaten Thread ausgeführt, um den Benutzer von der lästigen Synchronisation der Threads, dem Datenzugriff und anderen Problemen zu entlasten, die bei der Kommunikation zwischen Threads auftreten.

Ziemlich hässlich, ja, aber für die breite Masse der Nutzer (die sich bereits über die Komplexität der Sprache beschwert) ist es genau das Richtige.

Was OpenCL betrifft, so ist dies ein separates Thema. Das war nicht einmal in den Plänen zur Entwicklung der Plattform vorgesehen. Zu Beginn haben die fortgeschrittenen Forumsnutzer das Interesse der Entwickler an diesem Thema geweckt, aber die offizielle Antwort war "nein und wird nicht sein". Aber dann hat die Führung von MQ ihre Wut in Barmherzigkeit umgewandelt(danke Ilyaz).

Zu Dll: MQ hält sie für potenziell gefährlich und versucht daher, sie nach Möglichkeit zu vermeiden, insbesondere bei öffentlichen Diensten. Aber es verbietet sie nicht generell, denn Programmierer schreiben nicht nur für die Öffentlichkeit, sondern auch für ihre Gesprächspartner.

 

Alles in allem sieht es nach rein theoretischen Aussagen aus.

Gegen Multithreading und die volle Auslastung der Prozessoren im Terminal ist nichts einzuwenden. Sehen Sie sich an, wie viele Threads im Terminal laufen und wie sich die Anzahl der Threads im Laufe der Zeit verändert. Die Grundsätze des Multithreading wurden bereits mehrfach erläutert und demonstriert. Zum Beispiel, wie unabhängige Threads für die Neuberechnung von Indikatoren, Symbolen, das Paging von Chartdaten und die unabhängige Bedienung aller Expert Advisors und Skripte funktionieren.

Um Berechnungen von irgendetwas zu parallelisieren, sollten Sie zunächst erkennen, dass nur ein winziger Teil der Mathematik parallelisiert werden kann.

Sehen Sie sich den Multicore-Tester, MQL5 Cloud Network und OpenCL an. Wir sind der Zeit schon lange voraus, vor allem beim Cloud Computing. Schalten Sie jetzt das MQL5 Cloud Network in Ihrem Prüfgerät ein und lassen Sie sich von bis zu 14.000 CPUs unterstützen:

Sie scheinen auch nichts über OpenCL zu wissen. Die übliche Arbeitsweise ist es, den Programmcode in Quellform an den OpenCL-Compiler zu senden. Beachten Sie, dass verschiedene OpenCL-Handler (Ndivia, AMD, Intel usw.) den Code erhalten und für sich selbst überarbeiten müssen.

Статистика - MQL5 Cloud Network
Статистика - MQL5 Cloud Network
  • cloud.mql5.com
Произведенный объем работы, распределение агентов по странам, RAM, CPU и битности OS
 

Was ist Multithreading in MetaTrader 5:

Ich habe einfach auf den Test geklickt und sofort 5.743 Agenten/CPUs zum Laufen gebracht und 381.468 Durchläufe im Optimierer in 6 Minuten ausgeführt. Jeder Durchlauf dauerte zwischen 1 und 2 Sekunden. Wenn ich den Test auf meinem Computer mit 8 Kernen durchgeführt hätte, hätte ich statt 6 Minuten 800 bis 1600 Minuten gebraucht (381468 / 8 = 47683 Sekunden = 794 Minuten).

Und abgesehen davon, dass ich den Startknopf gedrückt habe, musste ich nichts weiter tun. Irgendein Skynet ist aufgestanden, hat die gesamte erforderliche Kartenhistorie selbständig synchronisiert, die Aufgabe auf Tausende von Computern in der ganzen Welt verteilt und sie massenhaft abgearbeitet.

Willkommen in der Realität...

 

Renat,

Frage zur Erstellung von Threads im MQL5 Expert Advisor.

 
sergeev:

Renate,

Die Frage nach der Erstellung von Threads im MQL5 Expert Advisor.

Dessen bin ich mir bewusst.

Ich habe nur nicht geschrieben, dass es besser ist, mit jemandem nicht über Multithreading zu sprechen, der nicht versteht, warum es in einer angewandten Programmiersprache kein Multithreading gibt. Wir haben das gesamte Infrastruktur-Multithreading des Terminals vollständig und effektiv implementiert.

Echtes Multithreading wird dort benötigt, wo man Aufgaben tatsächlich parallelisieren kann. Dies ist ein Testgerät. Und hier haben wir es so umgesetzt, dass viele Menschen weit davon entfernt sind, die Qualität, die Kontrolle und den Umfang der geleisteten Arbeit zu verstehen.

Mein Beispiel mit Claude ist ein einfacher Beweis für die Qualität und das Niveau der Ausarbeitung der Aufgabe.

 

Ja, Renat, du hast meinen Beitrag nicht aufmerksam gelesen. Wir sprechen hier nicht von Multithreading von MT5, sondern von Multithreading von MQL5. Wir können diese Threads in einem laufenden Programm nicht selbst erstellen. Das Öffnen eines neuen Charts mit einem Indikator ist ein Tamburintanz, keine Lösung.

Es ist erstaunlich, Sie haben eine Menge unnötiger Dinge in MQL5 gemacht, in Anbetracht einer Masse Benutzer. Und was mich betrifft, so richten Sie sich hauptsächlich an Dummies und nicht an gebildete Programmierer. Daher die vielen Einschränkungen, die Unmöglichkeit, direkt mit dem Speicher zu arbeiten, usw. Die Frage ist also, warum brauchen Dummies z.B. Klassen?

Wenn Sie Ihr Produkt nicht nur für Dummies anbieten, warum können Sie dann nicht auch erfahrenen Programmierern die Möglichkeit geben, die Systemressourcen effektiv zu nutzen?

Das Fehlen von Multithreading wird nicht durch irgendwelche Klassen kompensiert. Ein Programm kann noch so schlau aussehen, wenn es die Systemressourcen ineffizient nutzt, ist es für alle eine Schande. Vielleicht haben Sie in Ihrem Streben nach Innovation vergessen, dass die MQL-Sprache in erster Linie zum Schreiben von Handels- und Analyseprogrammen gedacht ist und nicht zum Programmieren um des Programmierens willen. Daher sollten die Geschwindigkeit und die Effektivität des Programms an erster Stelle stehen, und nicht die Geschwindigkeit beim Schreiben von Code. Denn die Arbeit mit großen Datenmengen wird a priori erwartet.

Ich denke, dass die Möglichkeiten von MQL4 für die meisten Benutzer völlig ausreichend sind. Das Einzige, was noch fehlte, war die Unterstützung von Strukturen, Zeigern auf Variablen und Zeigern auf Funktionen (oder die eingebaute Unterstützung von Callback-Funktionen). Und das ist alles. Mit diesem Arsenal können Sie beliebige Programme erstellen, die sehr effektiv arbeiten, die erforderliche Anzahl von Threads, Callbacks usw. erzeugen.

 

Fleisch, nichts für ungut, aber mit diesem Niveau des Verständnisses für die Probleme im Kindergarten.

Ich habe alles sorgfältig gelesen, aber ich habe nicht die Möglichkeit, eine umfassende Ausbildung zu absolvieren. Ich habe 11 Jahre Erfahrung mit den Sprachen MQL/MQL2/MQL4/MQL5.

 
meat:

Es geht überhaupt nicht um MT5-Multithreading, sondern um MQL5-Multithreading. Wir können diese Threads im laufenden Programm nicht selbst erstellen. Und die Software, die ein neues Diagramm mit einem Indikator öffnet, ist, wie Sie sicher zugeben werden, ein Tamburintanz und keine Lösung.

VinAPI ist eine Hilfe. Sie brauchen das Multithreading in MQL5 nicht. Das heißt, es ist überhaupt nicht notwendig.
 
meat:


Das Erstaunliche ist, dass Sie so viele unnötige Dinge in MQL5 gemacht haben, wenn wir einen Massenbenutzer in Betracht ziehen.

Wenn Sie einen einzelnen Benutzer nehmen, kann es eine Menge unnötiger Dinge geben. Und wenn man anfängt, seinen Horizont zu erweitern und zusätzliche Funktionen benötigt, stellt sich heraus, dass im Gegenteil etwas bereits vorhanden ist und etwas fehlt.

MQL5 befindet sich noch in der Entwicklung. Nach und nach wird etwas Neues hinzugefügt. Obwohl es natürlich auch Nachteile gibt, z.B. können Sie keine eigenen Ereignisse erstellen, es gibt keine Exception-Handler und kein Multithreading. Ich hoffe, dass all dies eines Tages herauskommt? Aber ich bezweifle, dass das alles morgen umgesetzt werden kann.

Wenn man es wirklich will, ist Multithreading auch für Testagenten in OpenCL verfügbar. Das ist zwar nicht ganz bequem, aber immerhin ist es vorhanden und Sie können Aufgaben parallelisieren.

 
Renat:

Fleisch, nichts für ungut, aber mit diesem Niveau des Verständnisses für die Probleme im Kindergarten.

Und Sie sagen, nicht der Unternehmensstandard))

Wenn Fragen gestellt werden, bedeutet das, dass die Antworten nicht an der Oberfläche liegen...

Grund der Beschwerde: