Programmation asynchrone et multithread dans MQL - page 13

 
Реter Konow:

S'ils ajoutent le multithreading, cela vous fera-t-il sentir plus mal ? Et donc ils ont ajouté beaucoup de choses à MQL, et c'est une chose vraiment utile. Mais son utilité ne peut être comprise que par une personne qui écrit des programmes très complexes et encombrants en MQL. Si vous ne comprenez pas à quoi sert le multithreading, cela signifie que vous n'écrivez pas de tels programmes. Quand tu le feras, tu comprendras. C'est très simple. ))

Le multithreading est vraiment nécessaire, surtout dans le testeur, notamment en mode multi-instruments. Je manque souvent de performance. Mais je ne suis pas un expert en programmation et je ne comprends pas très bien les subtilités, je sais seulement que je dois compter beaucoup de choses en parallèle). Et la mise en parallèle du testeur serait extrêmement utile.
 
Реter Konow:

S'ils ajoutent le multithreading, cela vous rendra-t-il plus mauvais ?

certainement pas - ce sera mieux, ! - MAIS la question clé ici est le support - qui expliquera comment l'utiliser ? - Qui réparera les bugs ? - Qui fournira la garantie d'une fonctionnalité compréhensible ?

Selon l'idée de base des développeurs, qui et comment utiliser la TA, ils fournissent une fonctionnalité correspondant à C++, supprimant ainsi le "casse-tête" de la formation et de l'explication du fonctionnement - la littérature sur C++ et les exemplesd'écriture de programmes d' entrée de gamme sur le web depuis 20 ans ont permis de collecter beaucoup de choses.

Avez-vous vu un paquet prêt à l'emploi (selon le problème de TC) qui serait appliqué à C++ ?

 
Igor Makanu:

"experts" ? - Tu n'as rien à dire, fourre ton imho... Il s'agit d'une grande communauté MQL avec des professionnels dans différents domaines, malheureusement, vous n'avez montré aucune de vos connaissances qui pourraient être utiles à la communauté, vous pouvez m'accuser de tout ce que vous voulez - "vous êtes l'expert ! "


Les développeurs feront l'affaire ? - Vous ne pouvez même pas expliquer POURQUOI c'est nécessaire, n'est-ce pas ? )))

Quel est l'objectif de MetaQoutes ? - le but, comme toute entreprise informatique de faire du profit ! Je ne sais pas pourquoi, MetaQoutes est très sérieux dans la promotion de ses services, beaucoup de travail a été fait pour populariser le trading algorithmique, pour donner du matériel analytique, pour créer une communauté en ligne... ce genre d'action caritative n'est le fait que de quelques sociétés informatiques, généralement les géants du secteur.

Ainsi, l'entreprise consacre ses ressources à quelque chose qui, dans l'avenir (pas sûr), fera des bénéfices. .... et puis, voilà... un utilisateur arrive qui a besoin d'adapter le concept de Python ou Java retardé à MQl..... Tu ne trouves pas ça drôle ? - Quel âge avez-vous ? ))))


Je respecte le fait que la persistance est souvent le seul moyen de trouver sa niche dans la vie ! Bonne chance dans ce dur labeur !

Il n'y a rien à vous dire sur ce sujet !
Vous n'avez même pas assez de logique pour comprendre quel avantage effectif MetaQuotes tirera de la possibilité d'écrire des programmes asynchrones.
Et il attirera vraiment les spécialistes, qui écrivent des programmes asynchrones.
Et il y a suffisamment de spécialistes adéquats dans la communauté, avec lesquels vous pouvez discuter des problèmes et des idées, au lieu d'écouter votre "je suis un spécialiste".
Hélas, pour être un expert, il faut suivre l'évolution de la technologie, quelle que soit la langue dans laquelle elle est utilisée.
Vous n'entendez même pas ce qu'on vous dit que le C++ est également écrit de manière asynchrone, mais vous ne le comprenez probablement pas, vous ne vous êtes pas fixé de tâches asynchrones.
Et modérons tes ardeurs, tu ne peux même pas communiquer normalement.

 
Roman:

C'est toi qui n'as rien à dire sur ce sujet !

ne parlent pas, mais il n'y a toujours pas de réponse :


répondre à la question : pourquoi le terminal de négociation en a-t-il besoin ?
 
Maxim Romanov:
Le multithreading est vraiment nécessaire, surtout dans le testeur, notamment en mode multi-instruments. Je manque souvent de performance. Mais je ne suis pas un expert en programmation et je ne comprends pas très bien les subtilités, je sais seulement que je dois compter beaucoup de choses et en parallèle). Et la mise en parallèle du testeur serait extrêmement utile.
Et je vais développer une visualisation tridimensionnelle, et il n'est pas raisonnable de la mettre dans un seul thread avec des calculs, des événements d'interface, des événements externes (appels de serveur). La DLL n'est pas adaptée toujours pour une raison : vous ne pouvez pas distribuer les programmes librement.
 
Igor Makanu:

certainement pas - ce sera mieux, ! - MAIS la question clé ici est le support - qui expliquera comment l'utiliser ? - Qui réparera les bugs ? - Qui s'assurera que la fonctionnalité est garantie comme étant compréhensible ?

...

De mon point de vue, c'est le moindre des problèmes. L'essentiel est que les gens communiquent sur ce sujet. Le forum a besoin de nouveaux sujets. N'est-ce pas ? Ça ne peut que s'améliorer. Qu'est-ce qui sera critique s'il y a des problèmes et des bugs parmi les utilisateurs ? Et quand il n'y en avait pas ? )

 
Andrey Pogoreltsev:

Vous exigez une exécution asynchrone des requêtes mais vous citez le multithreading en exemple... Je t'ai poussé à le découvrir, mais tu ne l'as jamais fait.

Je vous ai donné une solution à votre problème exact ici : https://www.mql5.com/ru/forum/318593/page4#comment_12568119.

Mais je suis sûr que vous n'avez même pas étudié le sujet.

Il me semble que si vous donnez une file d'attente asynchrone, vous demanderez toujours le multithreading... Essayez au moins de comprendre les notions de OVERLAPPED et d'événements pour commencer, n'êtes-vous pas en train de demander à WinAPI d'entrer dans votre code).

Si vous introduisez le multithreading dans le terminal, il s'enterrera lui-même des programmeurs malheureux, plus vite que la vitesse de la lumière.

Les programmeurs cherchent des solutions aux problèmes, et ne demandent pas au cadre de changer pour s'adapter à leur ignorance.

Non, vous avez tort, j'ai tout regardé et je vais certainement m'en occuper.
D'ailleurs, tu es le seul à avoir donné au moins une bonne direction merci, pour le reste c'est seulement de la gaffe.
Il y a juste beaucoup de gens qui ne comprennent pas l'essence du sujet, c'est pourquoi je devais répondre à leurs questions. C'est pourquoi je devais répondre à leurs questions. C'est pourquoi le sujet a pris de l'ampleur.
Il existe plusieurs technologies pour le multithreading ou la connexion asynchrone, c'est pourquoi beaucoup d'entre eux ne la comprennent pas.
Et j'ai dû donner à la hâte des échantillons tirés d'Internet, mais même ceux-ci expliquent au moins d'une certaine manière l'essentiel de la technologie.
Personne n'a pris la peine de montrer d'autres technologies et d'expliquer comment elles fonctionnent, un chœur.

 
Roman:

Non non, vous vous trompez, j'ai tout examiné, je vais l'examiner sans ambiguïté.
D'ailleurs, vous êtes le seul à avoir donné au moins une vraie direction, merci, les autres ne font que gaffer.
Il y a juste beaucoup de gens qui ne comprennent pas l'essence du sujet, c'est pourquoi j'ai dû répondre à leurs questions. C'est pourquoi je devais répondre à leurs questions. C'est pourquoi le sujet a pris de l'ampleur.
Et en ce qui concerne le multithreading ou la connexion asynchrone, il existe certaines technologies, c'est pourquoi beaucoup n'y comprennent rien.
Et j'ai dû donner à la hâte des exemples tirés de l'Internet, mais même ceux-ci expliquent au moins d'une certaine manière l'essence de la technologie.
Personne n'a pris la peine de montrer d'autres technologies et d'expliquer comment elles fonctionnent, un chœur.

Multithreading - les tâches sont exécutées dans plusieurs threads. Peut fonctionner sur un seul processeur, tout en étant multithreading et en passant de l'un à l'autre lorsque les quotas de temps processeur sont épuisés. Nécessite une synchronisation pour l'accès aux ressources partagées. Peut conduire à des blocages, des conditions de course, des bogues delibération de la mémoire et d'autres "surprises".

Asynchrone - exécution de fonctions non bloquées (c'est-à-dire que le contrôle est retourné immédiatement après la sortie de la méthode), généralement sur d'autres dispositifs (équipements de réseau, dispositifs de stockage, périphériques, etc. Par exemple, il est possible d'écrire un serveur multi-utilisateurs très performant en utilisant un seul thread et des connexions client de traitement en bout de chaîne. Tout dépend de l'objectif de ce serveur.

Dans votre cas, vous devez créer un grand nombre de connexions à l'aide de l'interface WinAPI et vous pouvez vérifier l'état de ces connexions par le biais de WaitForMultipleObjects avec un délai d'attente, afin de ne pas conserver un thread de temporisation, par exemple.

PS : Théoriquement, IOCompletionPort pourrait aussi être utilisé, mais cela demande plus de connaissances et une conception soignée.
 
Andrey Pogoreltsev:

Multithreading - les tâches sont exécutées dans plusieurs threads. Peut fonctionner sur un seul processeur, tout en étant multithreading et en passant de l'un à l'autre lorsque les quotas de temps processeur sont épuisés. Nécessite une synchronisation pour l'accès aux ressources partagées. Peut conduire à des blocages, des conditions de course, des erreurs de libération de mémoire et d'autres "surprises".

Est-ce vraiment si dangereux ? Erreurs dans la libération de la mémoire... Cependant, les conseillers experts fonctionnent sur différents graphiques dans différents fils et il n'y a pas de défaillances inattendues. Ainsi, les tâches distribuées entre les EA ne provoqueront pas d'erreurs critiques, mais les tâches distribuées entre les threads à l'intérieur d'une EA le feront ? Bien sûr, je ne suis pas un expert en la matière, mais quel est le problème de déplacer la méthode de distribution des tâches entre les EA dans une seule EA ? Peut-être y a-t-il un problème, je ne le conteste pas.

 
Andrey Pogoreltsev:

Multithreading - les tâches sont exécutées dans plusieurs threads. Peut fonctionner sur un seul processeur, tout en étant multithreading et en passant de l'un à l'autre lorsque les quotas de temps processeur sont épuisés. Nécessite une synchronisation pour l'accès aux ressources partagées. Peut conduire à des blocages, des conditions de course, des bogues de libération de la mémoire et d'autres "surprises".

Asynchrone - exécution de fonctions non bloquées (c'est-à-dire que le contrôle est retourné immédiatement après la sortie de la méthode), généralement sur d'autres dispositifs (équipements de réseau, dispositifs de stockage, périphériques, etc. Par exemple, il est possible d'écrire un serveur multi-utilisateurs très performant en utilisant un seul thread et des connexions client de traitement en bout de chaîne. Tout dépend de l'objectif de ce serveur.

Dans votre cas, vous devez créer un grand nombre de connexions à l'aide de WinAPI et vous pouvez vérifier l'état de ces connexions avec WaitForMultipleObjects avec un délai d'attente, de sorte que vous n'avez pas besoin de maintenir un thread de minuterie, par exemple.

PS : Théoriquement, vous pouvez aussi utiliser IOCompletionPort, mais cela demande plus de connaissances et une conception claire.

Maintenant, c'est une conversation, j'ai fait de l'exécution non bloquée avec asyncio, mais si vous écrivez le mot coroutine ou calback ici, il y a beaucoup de confusion et je préfère ne rien dire ;).
Je connais moi-même le principe des appels non bloquants, mais seulement dans python et une autre bibliothèque C et C++.
Je n'ai jamais travaillé avec WinAPI, je vais l'étudier, je regardais d'autres bibliothèques, mais cela ne fait aucune différence, l'essentiel est de comprendre la syntaxe, et je comprends ce qu'il y a là-bas ;)))
Mais au cours de la conversation, j'ai suggéré d'ajouter une telle fonctionnalité à mql ordinaire, pour permettre d'écrire du code asynchrone dès le départ.
Et nous avons commencé à être confus parce que nous ne comprenions pas pourquoi et pour quoi faire. Parce que c'est parce que))