Je sais que maintenant que la plupart des processeurs ont deux cœurs ou plus, la programmation multicœur fait fureur. Existe-t-il des fonctionnalités pour utiliser cela en Java? Je sais que Java a une classe Thread, mais je sais aussi que cela a duré longtemps avant que les multicœurs ne deviennent populaires. Si je peux utiliser plusieurs cœurs en Java, quelle classe / technique utiliserais-je?
Réponses
Trop de publicités?Java support pour les processeurs multicœurs processeurs/traitement parallèle?
Oui. Il a également été une plate-forme pour d'autres langages de programmation où la mise en œuvre ajouté un "vrai multithreading" ou "réel threading" point de vente. Le G1 Garbage Collector introduit dans les nouvelles versions permet également l'utilisation de multi-core de matériel.
Java de la Simultanéité dans la Pratique
Essayez d'obtenir une copie de la Java de la Simultanéité dans la Pratique du livre.
Si je peut utiliser plusieurs cœurs de Java, quelle classe/technique je utilisez?
java.util.concurrent
Les classes utilitaires souvent utile dans la programmation simultanée. Ce package comprend quelques petites normalisé extensible cadres, ainsi que certains les classes qui fournissent utile fonctionnalité et sont autrement pénible ou difficile à mettre en œuvre. Voici une brève description de la composants principaux.
Les exécuteurs
Executor
est une simple interface normalisée pour la définition de la coutume comme un fil sous-systèmes, y compris des pools de threads, asynchrone IO, et des tâches léger cadres.Les files d'attente
La java.util.simultanées
ConcurrentLinkedQueue
catégorie fournitures efficace évolutive "thread-safe" non-blocage de la file d'attente FIFO.Calendrier
L'
TimeUnit
classe fournit plusieurs niveaux de granularité (y compris nanosecondes) de déterminer et de contrôler le temps en fonction des opérations. La plupart des classes dans le package contient les opérations basées sur les délais d'attente en plus pour une durée indéterminée attend.Synchroniseurs
Quatre classes de l'aide commune à des fins spéciales de la synchronisation des expressions idiomatiques.
Semaphore
est un classique de la simultanéité de l'outil.CountDownLatch
est un très simple mais très commun de l'utilitaire de blocage jusqu'à ce qu'un certain nombre de signaux, des événements ou des conditions d'attente. [...]Les Collections Simultanées
En plus de Files d'attente, ce paquet fournit un peu de la Collecte des implémentations conçu pour une utilisation dans multithread contextes:
ConcurrentHashMap
,CopyOnWriteArrayList
, etCopyOnWriteArraySet
.Cela aussi est très pratique si vous voulez faire correspondre le nombre de threads pour le nombre de Processeurs disponibles, par exemple:
int n = Runtime.getRuntime().availableProcessors();
Dans la plupart des implémentations Java, vous pouvez compter sur les threads Java d'être de vrais OS de threads. En conséquence, le système d'exploitation va prendre soin de s'assurer que la charge de travail est répartie sur plusieurs cores si vous utilisez la classe Thread.
Threads du système d'exploitation pré-date des produits de base des systèmes multicœurs par une longue période de temps, ce qui n'est pas une préoccupation vraiment. La seule différence des systèmes multicœurs fait a été de permettre multiplexé dans le temps threads du système d'exploitation à être exécuté comme un véritable threads simultanés sur plusieurs cœurs.
Java 5 a introduit le package java.util.concurrent qui aide à créer des applications simultanées pouvant bénéficier de systèmes multicœurs. Ce package va bien au-delà des fonctionnalités de multithreading offertes dans Java 1.4 et versions antérieures (comme synchronisé, attendre, notifier, etc.).
Il est proposé que Java 7 inclue le framework Fork / Join pour faciliter l'utilisation des systèmes multicœurs.
Vous trouverez de nouvelles fonctionnalités dans Ateji PX, une extension du langage Java, avec en parallèle des primitives inspiré du pi-calcul. Tout à fait différent de fil de la programmation et tout basé sur le thread (les Tâches, les Exécuteurs testamentaires, etc).
Le parallélisme introduit de cette façon, au niveau du langage, par opposition à filetage bibliothèques qui fournissent des API d'accès à un la plupart du temps au niveau du matériel concept, rend la programmation multicœur beaucoup plus simple et intuitive.
C'est une approche radicalement nouvelle de la programmation parallèle la peine de lire à propos de (disclaimer: je suis le concepteur de Ateji PX). Le livre blanc est ici : http://www.ateji.com/px/whitepapers/Ateji%20PX%20for%20Java%20v1.0.pdf.