Comment pratiqueriez-vous la concurrence et le multi-threading? [fermé]

33

Je lisais des articles sur la concurrence, le multi-threading et comment "le repas gratuit est terminé" . Mais je n'ai pas encore eu la possibilité d'utiliser MT dans mon travail.

Je suis donc à la recherche de suggestions sur ce que je pourrais faire pour acquérir une certaine pratique de la MT très chargée en CPU par le biais d’exercices ou par la participation à des projets à code source ouvert.

Merci.

Edit: je suis plus intéressé par les projets open source qui utilisent MT pour les tâches liées au processeur, ou simplement par les algorithmes qu'il est intéressant de mettre en œuvre à l'aide de MT, plutôt que par des livres ou des articles décrivant uniquement les outils tels que les threads, les mutex et les verrous. comment MT peut être utilisé pour avoir des interfaces graphiques réactives ...

Xavier Nodet
la source
1
Éventuellement d'intérêt: programmers.stackexchange.com/questions/24936/…
Orbling
5
Q: Comment pratiqueriez-vous la concurrence et le multi-threading? A: en jonglant
Steven A. Lowe
@ Steven: Pas si loin, vraiment.
Robert Harvey
Le lien "Le repas gratuit est terminé" est mort
utilisateur
Ça devrait aller maintenant ...
Xavier Nodet

Réponses:

15

L'article de Joseph Albahari sur le filetage en C # est l'une des meilleures ressources que j'ai vue.

La table des matières est ci-dessous. Notez que certaines rubriques, telles que la bibliothèque de tâches parallèles, sont spécifiques à .NET, mais qu’elles s’appliquent en grande partie à d’autres langages, notamment Java.

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

Vous pouvez également consulter le didacticiel de Jon Skeet ici: http://www.yoda.arachsys.com/csharp/threads/

Robert Harvey
la source
3
J'ajoute la page multithreading en c # de Jon Skeet à votre réponse: yoda.arachsys.com/csharp/threads
1
Deuxièmement, les 5 chapitres d'Albahari ont été extrêmement utiles. Pour vous entraîner, voici un exercice simple - Créez un jeu multijoueur à l'aide de WCF (si vous le savez) et une interface utilisateur simple - essayez de mettre à jour les commandes de l'interface utilisateur avec les réponses de chaque joueur. Avez-vous vérifié le code Firefox?
Narayana
cela vous dérangerait-il d'expliquer davantage ce qu'il fait et pourquoi le recommandez-vous comme réponse à la question posée? « Link-ne répond » ne sont pas tout à fait la bienvenue à Stack Echange
moucheron
1
@gnat: j'ai collé la table des matières dans ma réponse.
Robert Harvey
Le lien vers le didacticiel de Jon Skeet ne semblait pas fonctionner (je recevais une page Azure 404) - voici une archive: web.archive.org/web/20181010053742/http://www.yoda.arachsys.com /…
ArtOfWarfare le
13

Java Concurrency in Practice est l'un des meilleurs ouvrages sur le multi-threading et la simultanéité. Bien que tous les exemples de ce livre soient basés sur Java, ce livre fournit une explication solide du monde de la traduction automatique. Cela m'a beaucoup aidé lorsque je développais un système de traduction automatique.

Sorantis
la source
3
+1 bon livre. Et c’est la concurrence Java en pratique, pas l’action.
Talonx
8

Le chapitre 11 du livre Intel Threading Building Blocks de James Reinders est consacré à des exemples d’algorithmes et de projets utilisant le calcul parallèle (ou programmation parallèle): un outil de recherche de sous-chaîne, le jeu de la vie, un tamis d’Ératosthène, Matrix Multiply et puis d'autres sujets plus avancés tels que le filtrage de paquets sur le réseau et les jeux.

Xavier Nodet
la source
4

La programmation simultanée sur Windows de Joe Duffy m'a été très utile. Il y a beaucoup de profondeur. Cela ne donne pas de coups de poing, alors vous avez vraiment une idée précise de toutes les façons dont vous pouvez vous tirer une balle dans le pied. Cela m'a aidé à faire preuve de prudence, ce qui est le meilleur conseil que je puisse donner à quiconque commence avec les applications MT.

Scott Whitlock
la source
2

Il y a une différence entre la concurrence et le parallélisme. La simultanéité est l'acte de faire plus d'une chose à la fois, comme écrire dans 2 fichiers. Le parallélisme consiste à accélérer les programmes en utilisant plusieurs cœurs.

Bien qu'il n'y ait pas de déjeuner gratuit en matière de concurrence, dans le parallélisme, le déjeuner devient certainement de plus en plus gratuit, voir les développements tels que http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

dan_waterworth
la source
2
Votre distinction est incorrecte. La simultanéité est l'acte consistant à effectuer plusieurs tâches dans des périodes qui se chevauchent sans faire nécessairement plus d'une chose à la fois . Le parallélisme est l'acte de faire plus d'une chose à un moment donné.
Asad Saeeduddin
S'ils se chevauchent, vous êtes en train de faire plus d'une chose à la fois.
dan_waterworth
Si leurs heures de début et de fin se chevauchent, cela ne signifie pas que les deux tâches se déroulent simultanément à un moment donné. Somme deux listes d'entiers à additionner, soit vous pouvez demander à deux personnes de additionner chaque liste séparément et simultanément, à la fois simultanée et parallèle, ou vous pouvez vous asseoir et alterner entre la somme des entrées d'une liste et celle de l'autre liste, qui est concurrente mais pas parallèle.
Asad Saeeduddin
Je n'ai pas dit qu'ils se passaient simultanément. J'ai dit de faire plus d'une chose à la fois.
dan_waterworth
Faire plus d'une chose à la fois revient à faire deux choses simultanément. Si plusieurs choses se produisent à un moment donné, elles se produisent simultanément.
Asad Saeeduddin
1

Ce site a quelques bons exemples de projets en général. www.planet-source-code.com

Il suffit de choisir une langue et de rechercher le multi-threading. vous devriez voir un certain nombre de projets avec le code source disponible.

Pemdas
la source
Je suis surpris que cela n'ait pas encore été voté. C’est la seule réponse que j’ai vue qui se concentre sur la question "comment pratiquer la programmation parallèle et simultanée". Toute autre réponse aborde la question "comment apprendre les concepts", qui est une question différente.
Josiah