Je veux faire un accord sur le programme multithreadé. P>
Si je sais combien de threads peuvent vraiment travailler en parallèle, je peux rendre le programme beaucoup plus efficace. P>
Y a-t-il un moyen de faire ces informations? p>
5 Réponses :
Oui sur Windows à coup sûr. JNA avec kernel32.dll. Utilisez Je pense que cela fournira le nombre réel de processeurs installés, pas le nombre disponible. P> system_info code> Structure de
getNamageSysteminfo code> appel. Il y a
DwnumberofProcesseurs code> entre autres choses. p>
C'est une façon assez difficile (et non portable) de faire cela.
Accepté, bien que cela donne le nombre de processeurs. Je me souviens tout simplement de ce champ d'utiliser auparavant la structure System_info pour un but différent.
runtime.getruntime (). DevinsProcesseurs (); code> p>
Vous pouvez utiliser
Runtime.getRuntime().availableProcessors()
+1 - Remarque: cela ne dit pas à l'application Combien de processeurs / cœurs installés i>. Mais cela le dit-il combien sont disponibles i> au JVM ... qui est ce que l'OP a vraiment besoin.
@Stephen C: Oui, j'ai besoin de cela. Mais pourriez-vous m'éclairer un peu: quand est-il possible que tous les processeurs ne soient pas disponibles pour la JVM?
@Roman: J'imagine que lorsque le système d'exploitation se réserve des noyaux / processeurs pour un autre processus, ils ne seront pas disponibles pour la JVM.
Que diriez-vous (les extraits de code parlent 1000 mots):
Une note sur la méthode des propulseurs disponibles (), il ne distingue pas entre les processeurs physiques et les processeurs virtuels. E.G., si vous avez une hyperthreading activée sur votre ordinateur, le nombre sera double du nombre de processeurs physiques (qui est un peu frustrant). Malheureusement, il n'ya aucun moyen de déterminer de vrais processeurs virtuels en pure Java. P>
Grande question! Merci de le demander