11
votes

Y a-t-il un moyen de savoir combien de processeurs (ou de cœurs) sont installés?

Je veux faire un accord sur le programme multithreadé.

Si je sais combien de threads peuvent vraiment travailler en parallèle, je peux rendre le programme beaucoup plus efficace.

Y a-t-il un moyen de faire ces informations?


1 commentaires

Grande question! Merci de le demander


5 Réponses :


1
votes

Oui sur Windows à coup sûr. JNA avec kernel32.dll. Utilisez system_info Structure de getNamageSysteminfo appel. Il y a DwnumberofProcesseurs entre autres choses.

Je pense que cela fournira le nombre réel de processeurs installés, pas le nombre disponible.


2 commentaires

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.



4
votes

runtime.getruntime (). DevinsProcesseurs ();


0 commentaires

17
votes

Vous pouvez utiliser

Runtime.getRuntime().availableProcessors()


3 commentaires

+1 - Remarque: cela ne dit pas à l'application Combien de processeurs / cœurs installés . Mais cela le dit-il combien sont disponibles 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.



2
votes

Que diriez-vous (les extraits de code parlent 1000 mots): xxx


0 commentaires

7
votes

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.


0 commentaires