Lorsque je crée un programme multi-threadé et que j'utilise des méthodes telles que l'attente ou le signal pour contrôler les threads entre autres choses, le contrôle de la JVM contrôle tout l'état du thread change ou le système d'exploitation sous-jacent a-t-il quelque chose à voir. P >
3 Réponses :
Cela dépend de la mise en œuvre de la JVM. La plupart des JVM modernes (Suns Hotspot, Oracles Jrockit, IBM VMS) utiliseront le modèle de filetage du système d'exploitation, car cela donnera la meilleure performance. P>
Mise en œuvre précoce utilisée des threads verts - la machine virtuelle modélisait les threads en utilisant lui-même. Celui-ci était généralement utilisé lorsque la plate-forme ou le système d'exploitation qu'il fonctionnait sur N'ajoutez pas de filetage. Par exemple, dans Java 1.1, des fils verts ont été utilisés sur Solaris. À l'époque, le modèle commun d'utiliser plusieurs cœurs / processeurs dans Solaris était d'utiliser plusieurs processus - seulement plus tard étaient des threads ajoutés au système d'exploitation. P>
La spécification de langue Java ne spécifie pas la manière dont les threads doivent être mis en œuvre mais en général, si le système d'exploitation contient une prise en charge, les JVM modernes utiliseront la mise en œuvre du système d'exploitation. Lorsqu'il n'y a pas de support dans le système d'exploitation, par exemple sur les téléphones mobiles bas de gamme ou dans une mise en oeuvre de la carte Java, par exemple, les threads verts seront utilisés par le temps d'exécution. P>
De plus, des fils verts ont été retirés du code Sun Java complètement et ne sont plus pris en charge. La mise en œuvre était considérée comme assez mauvaise de toute façon.
Pour tous les téléphones mobiles modernes de bureau / serveur JVM / serveur JVM, YES - pour les téléphones mobiles à bas niveau bas ou les cartes à puce Java, ils peuvent toujours utiliser des filets verts.
Dans les premiers jours de Linux 2.4, au moins l'IBM JVM a utilisé des processus distincts pour mettre en œuvre des threads Java. Cela a entraîné une longue période pour basculer entre les filets, car le système nécessaire pour activer chaque fois un processus complètement différent. P>
En général, les threads Java pour que les threads du système d'exploitation et Java utiliseront des primitives de synchronisation OS pour implémenter synchronisée / attente / signal / ..., mais le mappage n'est pas aussi simple que vous pourriez penser. En fait, la JVM utilise des astuces intelligentes pour améliorer les performances et implémente autant que le code de synchronisation elle-même (au moins sur l'affaire non compris). P>
Si vous êtes vraiment intéressé par les détails, consultez le code source JVM ou sur CAEERW. org / notes / java_sync.html qui fournit une vue d'ensemble de la manière dont les primitives de synchronisation de Java sont implémentées sur Linux et Solaris. P>