Programmation asynchrone et multithread dans MQL - page 33

 
Roman:

J'aime tout :) différentes approches pour comprendre et ensuite choisir celle qui a le plus de sens pour moi et qui correspond aux exigences, c'est simple.

Le monde entier travaille avec DLL, avec les merveilles d'ICL seulement un groupe de sectaires qui pensent que c'est la plus haute compétence.
 
Yuriy Asaulenko:
Le monde entier travaille avec DLL, avec les miracles d'ICL seulement un groupe de sectaires qui pensent que c'est la plus haute compétence.

C'est hilarant, et je ne pourrais pas être plus d'accord ))))
Bien parti pour lire les manuels et réfléchir aux options proposées.
Merci à tous ceux qui n'ont vraiment pas fait de gaffe, ont suggéré diverses solutions.
Il y a maintenant l'embarras du choix.

 
Ça me rappelle une vieille blague, d'ailleurs.
Congrès médical international. Rapport de la délégation russe - "Ablation des amygdales par l'anus".
Nous l'avons lu. Suivi des questions du public.
- Nous admirons les compétences et les réalisations de la chirurgie russe. Mais pourquoi par le passage de derrière ?
- C'est comme ça qu'on fait tous.
 
Vict:

J'ai bien compris que Futures et Async sont des standards uniquement pour C++ ?
N'existe-t-il pas une bibliothèque similaire en C ?

 
Roman:

J'ai bien compris que Futures et Async sont des standards uniquement pour C++ ?
N'existe-t-il pas une bibliothèque similaire en C ?

Bien. Cish std a également un support multi-threading https://en.cppreference.com/w/c/thread

ZS : vous pouvez également lire le livre "c++ concurrency in action" d'anthony williams. Par exemple, au chapitre 9, il écrit "thread pool".

Thread support library - cppreference.com
  • en.cppreference.com
If the macro constant is defined by the compiler, the header and all of the names listed here are not provided. Function names, type names, and enumeration constants that begin with either , , , or , and a...
 
Vict:

Bien. Cish std a également un support multi-threading https://en.cppreference.com/w/c/thread

HH : vous pouvez aussi lire le livre "c++ concurrency in action" par anthony williams. Par exemple, au chapitre 9, il écrit "thread pool".

Je n'ai pas remarqué le lien Voir aussi en bas de page ))
J'ai compris,std::thread est en C, maisstd: :async ne l'est pas ((

Je lis ce livre maintenant )) Parallel C++ programming in action, Anthony Williams.
Le livre est dans la pièce jointe,
async commence au chapitre 4, assez facile à lire.
Et Kurt Ganteroth, dans son livre Optimizing C++ Programs, affirme qu'il est 14 fois plus coûteux de créer des threads que d'utiliser std::async.
C'estpourquoi je voulais à l'origine utiliser l'asynchronisme, mais je ne connaissais pas beaucoup les threads en C/C++ non plus,
donc siles threads sont plus chers, ils tombent de toute façon à l'usage.
Mais il s'avère qu'en C,std: :async n'existe pas((


 
Roman:

Je n'ai pas remarqué le lien Voir aussi en bas de page ))
J'ai compris,std::thread est en C, mais std: : async ne l'est pas ((

Je lis ce livre maintenant )) La programmation parallèle C++ en action, par Anthony Williams.
Si vous êtes intéressé, le livre est dans la pièce jointe, async commence au chapitre 4, assez facile à lire.
Et Kurt Ganteroth, dans son livre Optimizing C++ Programs, affirme qu'il est 14 fois plus coûteux de créer des threads que d'utiliser std::async.
C'est pourquoi je voulais à l'origine utiliser l'asynchronisme, mais je ne connaissais pas beaucoup les threads en C/C++ non plus,
donc siles fils sont plus chers, ils ne valent pas la peine d'être utilisés de toute façon.
Mais il s'avère qu'en C,
std: : async n'existe pas ((

Un fil n'est pas plus cher, c'est juste un outil de niveau inférieur avec lequel on peut faire n'importe quoi. Vous pouvez créer votre propre pool de threads simple sur "expensive threads" - une heure d'écriture (ou prendre une lib prête à l'emploi).

La création de threads est 14 fois plus coûteuse que l'utilisation de std::async.

Peut-être s'il y a un pool de threads dans l'asynchrone, mais ce n'est pas toujours le cas https://stackoverflow.com/questions/15666443/which-stdasync-implementations-use-thread-pools.

Par conséquent, l'asynchronisme est une boîte noire et incontrôlable. Je ne vous incite pas à écrire votre propre pool, si vous vous sentez à l'aise avec l'asynchronisme, très bien.

ZS : il y avait des rumeurs selon lesquelles l'asynchronisme allait être supprimé de c++17.
Which std::async implementations use thread pools?
Which std::async implementations use thread pools?
  • 2013.03.27
  • KnowItAllWannabeKnowItAllWannabe 5,31455 gold badges3434 silver badges7676 bronze badges
  • stackoverflow.com
One of the advantages of using instead of manually creating objects is supposed to be that can use thread pools under the covers to avoid oversubscription problems. But which...
 

Async peut être exécuté de manière synchrone, il y a un drapeau pour cela. Je pense que le thread pooling sur les plus est compliqué et n'a de sens qu'en cas d'extrême nécessité. Tu ferais mieux de jeter un coup d'oeil à Sharp, à ce pooling de threads.

Je recommande également "Scott Meyers : Efficient and Modern C++". 2016, facile à lire, comme un blockbuster. J'ai joint l'archive ci-dessous. Il a un chapitre intéressant sur les fils. Et en général, il faut lire Meyers, parce qu'il le faut ;)))

 
Andrei Novichkov:

Je pense que la mise en commun des fils sur les pros est délicate et n'a de sens que si elle est absolument nécessaire.

Ne rendez pas les choses plus difficiles qu'elles ne doivent l'être. Si vous ne voulez pas l'écrire vous-même, vous pouvez facilement en prendre un tout prêt, une recherche rapide ici https://github.com/vit-vit/ctpl. Et c'est quelque chose de moins prévisible, contrairement à async (qui est souvent critiqué).

vit-vit/CTPL
vit-vit/CTPL
  • vit-vit
  • github.com
More specifically, there are some threads dedicated to the pool and a container of jobs. The jobs come to the pool dynamically. A job is fetched and deleted from the container when there is an idle thread. The job is then run on that thread. A thread pool is helpful when you want to minimize time of loading and destroying threads and when you...
 
Vict:

Ne rendez pas ça plus difficile que ça ne l'est. Si vous ne voulez pas l'écrire vous-même, vous pouvez facilement en obtenir un prêt à l'emploi, voici une recherche rapide https://github.com/vit-vit/ctpl. Et c'est quelque chose de moins prévisible, contrairement à async (qui est souvent critiqué).

Non, je n'en ai pas envie )))))) Mais une recherche superficielle est aussi, hum, dangereuse. Je suis tombé sur beaucoup de déchets sur Github. Mais une autre question m'intéresse : y a-t-il des tâches qui nécessiteraient vraiment le thread pooling ? Pas simplement créer un fil, l'oublier et attendre qu'il se termine, mais le mettre en commun comme le décrit Williams ? Si je ne me trompe pas, il s'agit là d'un exemple de distributeur automatique de billets - quelle tâche pourrait justifier un tel judo miraculeux ? Je ne peux pas encore penser à une telle tâche. Et pourquoi ne regardez-vous pas vraiment ThreadPool où tout est déjà fait, il y a de la documentation et des exemples.