Comment définir l'affinité du noyau cpu d'un thread Java?
J'ai cherché précédentes écritures sur le même sujet, mais ne pouvait pas trouver une réponse digne, par conséquent, en posant cette question. Votre aide en répondant, il est fortement appréciée.
Je suis conscient de l'établissement d'un processus d'affinité à un PROCESSEUR core taskset de commande sous Linux. Mais je veux mettre un fil de Java de l'affinité à un cœur de processeur, de sorte que les autres threads appartenant au même processus peut s'exécuter sur tous les autres cœurs. Par exemple si j'ai un processus contenant 10 threads avec 4-core de la machine, j'aimerais réserver core-1 pour un fil et laissez-9 autres threads s'exécutent sur 3 autres cœurs. Peut-il être fait et comment le faire?
Merci
Sachin
source d'informationauteur Sachin
Vous devez vous connecter pour publier un commentaire.
Dire 2241 est le pid de votre processus java. Exécuter:
Cela vous donne une liste de threads. Trouver le vôtre et il note le nid de terrain. Dire nid=0x8e9, qui convertit en base 10 comme 2281. Ensuite, exécutez:
Fait.
Malheureusement, vous ne pouvez pas affecter les Threads Java pour une base spécifique. Ce que vous pouvez faire, cependant, est définie Les Priorités Des Threads de prioriser les threads (en supposant que ce serait faire la même chose)
Sinon, vous pouvez utiliser JNI, mais qui serait tout à fait exagéré.
Rappelez-vous l'application Java que votre course est en train de tourner dans une machine virtuelle java qui est en cours d'exécution sur le système d'exploitation. Pour vous d'être capable d'interagir directement avec le CPU que vous auriez besoin d'un faible niveau de langage de programmation (par exemple C).
Comme suggéré dans une autre réponse, vous pouvez utiliser JNI à interagir avec le langage de plus bas niveau (comme le C) de faire ce que vous voulez, néanmoins vous avez le délégué de la concurrence (threads gérés dans ce bas niveau langaguge)...
Vous pouvez le faire dans la plaine de Java à l'aide JNA. Il n'est pas nécessaire d'utiliser taskset. Rappelez-vous juste que affinité de thread est inutile si vous avez déjà isolé le noyau de noyau/threads utilisateur et les interruptions matérielles. Je suis affilié avec des Blocs de Corail qui a développé CoralThreads qui fait exactement cela.