Depuis un an, je travaille beaucoup sur la concurrence en Java et j'ai construit et travaillé sur de nombreux packages simultanés. Donc, en termes de développement dans le monde simultané, je suis assez confiant. De plus, je suis très intéressé à en apprendre et à mieux comprendre la programmation simultanée.
Mais je ne peux pas me répondre quoi ensuite? Quel supplément devrais-je apprendre ou travailler pour hériter de plus de compétences liées au traitement multicœur. S'il y a un bon livre (lu et apprécié «simultanéité en pratique» et «programmation simultanée en java») ou des ressources liées au traitement multicœur pour que je puisse passer au niveau suivant?
concurrency
multi-core
Jatin
la source
la source
Réponses:
Avis de non-responsabilité - Je ne suis pas un expert de la concurrence, mais mon co-auteur l'est, je le perroquet :-)
Puisque vous avez lu les livres de Doug Lea et Brian Goetz, vous avez certainement couvert le meilleur matériel à ce jour.
À l'avenir, il y a les nouvelles améliorations de concurrence dans Java 7. Plus particulièrement le framework Fork / Join et les nouvelles API NIO asynchrones.
Java 8 introduira de nouvelles améliorations de concurrence avec les collections lambdas / parallèles.
Une autre chose à considérer sérieusement est des moyens alternatifs de traiter la concurrence. Pour être franc, l'approche de «verrouillage des objets mutables» de Java sera toujours sujette aux erreurs, quelle que soit l'amélioration des API. Je recommande donc de regarder le modèle d'acteur de Scala et le STM de Clojure comme moyens alternatifs de traiter les problèmes de concurrence tout en maintenant l'interopérabilité avec Java.
[avertissement -> auto-publicité] Je recommanderai donc naturellement notre prochain livre, The Well-Grounded Java Developer , qui couvre toutes les choses que j'ai mentionnées ci-dessus: -). [/ warning]
De peur que j'oublie, Groovy a également une bibliothèque Gpars hautement recommandée, je ne l'ai pas utilisée personnellement cependant.
la source
Le langage de programmation D fournit deux paradigmes pour la programmation simultanée, qui ont tous deux leurs utilisations et sont plutôt intéressants.
std.concurrency fournit le passage de message sans partage de mémoire par défaut. Toutes les variables globales et statiques dans D sont thread-local par défaut
spawn
etsend
n'autorisent pas l'envoi de messages contenant une indirection de pointeur mutable. Un partage limité peut être obtenu via leshared
mot - clé, ce qui implique une vérification supplémentaire par le système de type. En dehors du dialecte sûr du langage, vous pouvez forcer les variables globales / partagées classiques de style C / Java en utilisant le__gshared
mot - clé, mais tous les paris sont désactivés en ce qui concerne la sécurité de la course. Ce modèle est détaillé dans un chapitre gratuit du livre d'Andrei Alexandresu "The D Programming Language".std.parallelism est moins sûr mais à certains égards plus flexible que std.concurrency et est spécifiquement orienté vers les données multicœurs et le parallélisme des tâches pour augmenter le débit de traitement des données plutôt que la concurrence générale. Il comporte une boucle foreach parallèle, des appels de fonction asynchrones, des réductions parallèles, etc. Il fournit des mécanismes pour faciliter l'écriture de code sans danger pour la course, mais cela nécessite encore un certain degré de discipline.
Une discussion plus approfondie sur les deux principaux paradigmes multithreading en D peut être trouvée dans mon récent article sur le sujet.
la source
Je vous suggère fortement d'aller voir Clojure
L'approche de la concurrence est très nouvelle et, à mon avis, une avancée significative par rapport à ce que vous voyez en Java et dans la plupart des autres langages. Quelques points clés:
Je suggère de regarder cette vidéo comme introduction
la source
Jetez un œil au langage Scala, qui étend Java et s'exécute sur la JVM. Il emprunte la notion d '"Acteurs" à Erlang et offre une bonne capacité pour gérer les échecs de concurrence.
la source
Si vous voulez le porter à un tout nouveau niveau, vous voudrez peut-être vous pencher sur la programmation avec CUDA .
Cela vous permet de répartir vos algorithmes sur des centaines de cœurs de traitement sur votre carte graphique plutôt que sur les quelques cœurs principaux du processeur. Il existe même des liaisons de langage qui facilitent apparemment relativement facilement l'accélération de langages de haut niveau comme python en utilisant des techniques GPGPU .
la source
Programmation de la concurrence sur la JVM: Mastering Synchronization, STM et Actors traite de la programmation simultanée dans Scala, Clojure, JRuby et Groovy.
Vous obtiendrez une compréhension assez solide des différentes approches de la concurrence.
Où est ton sourire?
la source