Quelles sont les meilleures ressources pour en savoir plus sur les applications simultanées et multithread? [fermé]

16

J'ai réalisé que j'avais un énorme déficit de connaissances en ce qui concerne les applications multithread et la programmation simultanée. J'ai couvert quelques notions de base dans le passé, mais la plupart d'entre elles semblent avoir disparu de mon esprit, et c'est certainement un domaine que je veux et dont j'ai besoin d'être mieux informé.

Quelles sont les meilleures ressources pour apprendre à créer des applications simultanées? Je suis une personne très orientée vers la pratique, donc si ce livre contient des exemples concrets, mieux c'est, mais je suis ouvert aux suggestions. Personnellement, je préfère travailler en pseudocode ou en C ++, et une orientation vers le développement de jeux serait préférable, mais pas obligatoire.

Zepee
la source
Vous préférez "travailler en pseudocode"? J'espère que ça marche pour vous! :)
logc

Réponses:

6

Voici les livres que j'ai trouvés utiles récemment:

Java Concurrency in Practice - par l'auteur d'une grande partie des utilitaires de concurrence Java. Un peu spécifique à Java, mais très clair et instructif sur les dangers et les pièges des threads.

The Art of Concurrency - pas un traité théorique scintillant comme le suggère le titre, en fait un recueil assez folklorique et terre-à-terre de conseils et d'exemples utiles.

Programmation de la concurrence sur la JVM - Celui-ci est en fait un traité théorique scintillant, mais très, très lisible et perspicace. Si vous avez besoin de savoir ce que sont les STM ou les acteurs, quelles sont leurs forces et leurs faiblesses et pourquoi , ce livre vous le dira.

Il existe de nombreuses bibliothèques d'utilitaires dédiées telles que Intel Threading Building Blocks ou Apple's Central Central Station - celles-ci ont généralement leurs propres manuels dédiés, qui sont généralement assez bons, et sont de toute façon obligatoires à lire si vous voulez faire quelque chose de grand avec eux.

Kilian Foth
la source
4

J'ai trouvé cette ressource de filetage gratuite mise en place par Joe Albahari excellente ...

Filetage en C #

Son incliné vers C # mais les concepts sont entièrement applicables à d'autres langages. Il fournit également le tutoriel en téléchargement PDF en anglais et dans plusieurs autres langues. Je le recommanderais en raison de la combinaison d'exemples de code, d'explications étape par étape du code et d'excellents diagrammes de séquence et d'état accompagnant les exemples.

Le tutoriel se compose de cinq parties:

Son disponible sous forme de livre ici: C # 4.0 en bref (chapitres 23 et 24)

dodgy_coder
la source
1
+1, c'est ma référence habituelle pour le filetage / la concurrence / le parallélisme dans .NET
Matthew King
1

Il existe désormais des fonctionnalités de threading dans la norme C ++. Donc, si vous voulez apprendre en C ++, je vous suggère de lire un simple examen de la nouvelle fonctionnalité de langage avant de vous diriger vers un didacticiel de threading générique. Revenez ensuite en arrière et passez en revue la norme plus en détail plus tard.

En pratique, le filetage est l'une de ces choses que la plupart des gens pensent comprendre, mais ne comprennent pas. Je suis allé à une conférence d'un chercheur en analyse statique qui a identifié les conditions de concurrence dans une base de données de recherche IBM (Java), dans un système de fichiers Linux (C) et dans d'autres projets assez prestigieux. Certains des projets ont été écrits par des experts respectés en matière de concurrence et de threading. Sachez qu'il est difficile de créer du code thread-safe et que le manque de connaissances n'est pas exclusif à ceux qui le reconnaissent en eux-mêmes.

Bien que cela ne vous aidera pas directement dans la programmation de jeux, je recommanderais de regarder certains tutoriels MPI (désolé, pas de recommandations spécifiques). Bien qu'il semble difficile d'écrire du code simultané correct avec des threads, il semble plutôt facile de le faire avec le passage de messages. Indirectement, l'espoir est que l'exploration de différents modèles de concurrence aidera votre propre processus de réflexion sur la structuration de votre code pour être thread-safe.

ccoakley
la source
1

Pour en savoir plus sur la concurrence, utilisez un langage conçu pour la concurrence. Golang est un bon choix car il a un support intégré pour la concurrence et une syntaxe de type C qui rend le langage facile à apprendre pour la plupart des programmeurs.

Il a un passage de message, des mutex, etc. qui couvrent presque tous vos besoins de concurrence et qui ont des équivalents plus compliqués dans d'autres langues.

Par exemple, recevoir un int d'un autre thread en variable à l' aaide de MPI en C:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

Réception d'un int dans la variable a d'un autre thread (utilisateur) dans go:

a := <-c

Pour apprendre le go dans la pratique, consultez la visite guidée, où vous pouvez écrire, compiler et exécuter du code go dans votre navigateur.

tour.golang.org

Pour passer à la partie simultanée

http://tour.golang.org/concurrency/1

Mon ancien professeur a organisé un cours de courte durée très populaire pour les étudiants CS de première année sur le thème de la concurrence. Pour une introduction rapide mais approfondie à ce qu'est la concurrence, je recommande vivement de lire ceci.

Principes fondamentaux de la programmation simultanée

Johan Wikström
la source