web-dev-qa-db-fra.com

Comment pratiquez-vous la simultanéité et le multi-threading?

J'ai lu sur la concurrence, le multi-threading et comment "le déjeuner 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 obtenir une certaine pratique du CPU lourd MT à travers des exercices ou la participation à certains projets open-source.

Merci.

Edit: je suis plus intéressé par les projets open-source qui utilisent MT pour les tâches liées au CPU, ou simplement des algorithmes qui sont intéressants à implémenter en utilisant MT, plutôt que des livres ou des papiers qui ne décrivent que le des outils tels que les threads, les mutex et les verrous, ou comment MT peut être utilisé pour avoir des interfaces graphiques réactives ...

33
Xavier Nodet

Le chapitre 11 du livre Intel Threading Building Blocks de James Reinders est consacré à des exemples d'algorithmes et de projets qui utilisent Parallel Computing (ou Parallel Programming): un sous-chaîne Finder, le jeu de la vie, un tamis d'ratosthène, la multiplication matricielle, puis d'autres sujets plus avancés comme le filtrage des paquets réseau et les jeux.

8
Xavier Nodet

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

La table des matières est ci-dessous. Notez que certaines rubriques, comme la bibliothèque parallèle de tâches, sont spécifiques à .NET, mais une grande partie est applicable à d'autres langages, en particulier 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/

15
Robert Harvey

Java Concurrency in Practice est l'un des meilleurs livres sur le multi-threading et la concurrence. Bien que tous les exemples du livre soient Java, ce livre donne une explication solide du monde MT. Il m'a beaucoup aidé lorsque je développais un MT système.

13
Sorantis

J'ai trouvé Programmation simultanée sur Windows par Joe Duffy pour être très utile. Il y a beaucoup de profondeur. Il ne tire aucun coup de poing, donc vous avez vraiment une bonne idée du nombre de façons de vous tirer une balle dans le pied. Cela m'a aidé à être prudent, ce qui est le meilleur conseil que je puisse donner à quiconque commençant par MT apps.

4
Scott Whitlock

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

Bien qu'il n'y ait pas de déjeuner gratuit en ce qui concerne la concurrence, en parallèle, le déjeuner devient certainement plus gratuit, voir des développements comme http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

2
dan_waterworth

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

Choisissez simplement une langue et recherchez le multi-threading. vous devriez voir un certain nombre de projets avec du code source disponible.

1
Pemdas