Vous pouvez déterminer le nombre de processus disponibles sur la machine virtuelle Java à l'aide de la méthode statique Runtime, availableProcessors . Une fois que vous avez déterminé le nombre de processeurs disponibles, créez ce nombre de threads et divisez votre travail en conséquence.
Mise à jour : pour clarifier davantage, un thread n'est qu'un objet en Java, vous pouvez donc le créer comme vous le feriez pour tout autre objet. Donc, disons que vous appelez la méthode ci-dessus et constatez qu'elle renvoie 2 processeurs. Impressionnant. Maintenant, vous pouvez créer une boucle qui génère un nouveau thread, divise le travail pour ce thread et déclenche le thread. Voici quelques psuedocode pour démontrer ce que je veux dire:
int processors = Runtime.getRuntime().availableProcessors();
for(int i=0; i < processors; i++) {
Thread yourThread = new AThreadYouCreated();
// You may need to pass in parameters depending on what work you are doing and how you setup your thread.
yourThread.start();
}
Pour plus d'informations sur la création de votre propre fil de discussion, consultez ce didacticiel . En outre, vous souhaiterez peut-être consulter Thread Pooling pour la création des threads.
Vous voudrez probablement regarder le framework java.util.concurrent pour ce genre de choses aussi. Quelque chose comme:
ou
C'est beaucoup plus agréable que de gérer vos propres pools de threads, etc.
la source
Option 1:
nouveauWorkStealingPool de
Executors
Avec cette API, vous n'avez pas besoin de transmettre le nombre de cœurs à
ExecutorService
.Implémentation de cette API depuis grepcode
Option 2:
API newFixedThreadPool de
Executors
ouother newXXX constructors
, qui renvoieExecutorService
remplacer nThreads par
Runtime.getRuntime().availableProcessors()
Option 3:
ThreadPoolExecutor
passer
Runtime.getRuntime().availableProcessors()
en paramètre àmaximumPoolSize
.la source
Doug Lea (auteur du package concurrent) a cet article qui peut être pertinent: http://gee.cs.oswego.edu/dl/papers/fj.pdf
Le framework Fork Join a été ajouté à Java SE 7. Voici quelques références supplémentaires:
http://www.ibm.com/developerworks/java/library/j-jtp11137/index.html Article de Brian Goetz
http://www.oracle.com/technetwork/articles/java/fork-join-422606.html
la source
La méthode standard est la méthode Runtime.getRuntime (). AvailableProcessors (). Sur la plupart des processeurs standard, vous aurez renvoyé ici le nombre de threads optimal (qui n'est pas le nombre réel de cœurs de processeur). C'est donc ce que vous recherchez.
Exemple:
N'oubliez PAS d'arrêter le service exécuteur comme ceci (ou votre programme ne se fermera pas):
Voici juste un bref aperçu de la configuration d'un futur code MT (hors-sujet, à titre d'illustration):
Ensuite, vous devez suivre le nombre de résultats attendus et les récupérer comme suit:
la source
Sur la classe Runtime, il existe une méthode appelée availableProcessors (). Vous pouvez l'utiliser pour déterminer le nombre de processeurs dont vous disposez. Puisque votre programme est lié au CPU, vous voudrez probablement avoir (au plus) un thread par CPU disponible.
la source