Les Threads Java vs OS Threads
On dirait que j'ai foiré avec les Threads Java/OS Threads et langage Interprété.
Avant de commencer, je ne comprends que le Fils Verts sont les Threads Java où le filetage est pris en charge par la JVM et l'ensemble du processus Java ne fonctionne que comme un OS unique Thread. Ainsi, sur un multi-processeur, système, il est inutile.
Maintenant mes questions est. J'ai deux Fils A et B. Chacune avec 100 de milliers de lignes de code indépendant. - Je exécuter ces threads dans mon Programme Java sur un système multiprocesseur. Chaque Thread va être donné un système d'exploitation natif Thread à EXÉCUTER qui peut s'exécuter sur un PROCESSEUR différent, mais depuis Java est interprété ces fils aura besoin pour interagir avec la JVM encore et encore pour convertir des octets de code pour les instructions machine ? Suis-je le droit ? Si oui, que pour les petits programmes Java Threads ne sera pas un gros avantage ?
Une fois le Hotspot compile à la fois ces chemins d'exécution à la fois peut être aussi bon en tant que natif des Threads ? Suis-je le droit ?
[EDIT] : Une autre question peut être, supposons que vous disposez d'un seul Fil de Java, dont le code n'est pas JIT compilé, vous devez créer ce Thread et start() il ? Comment fonctionne le système d'exploitation Fil et de la JVM interagissent pour exécuter le Bytecode ?
grâce
Vous devez vous connecter pour publier un commentaire.
Vous mélangez deux choses différentes; JIT fait par la machine virtuelle et le filetage de soutien offerts par la VM. Au plus profond, tout ce que vous faites se traduit par une sorte de code natif. Un byte-code d'instruction qui utilise des threads est pas différente de celle d'un JIT ed code qui accède à des threads.
Définir petite ici. Pour de courte durée des processus, oui, le filetage ne pas faire un gros écart depuis votre exécution séquentielle est assez rapide. Notez que cela dépend encore une fois sur le problème étant résolu. Pour les boîtes à outils d'INTERFACE utilisateur, peu importe la taille de l'application, une sorte de filetage/asynchrone, il est nécessaire de garder l'INTERFACE utilisateur réactive.
Threading de sens que si vous avez des choses qui peut être exécutées en parallèle. Un exemple typique serait ce lourd IO sur le fil et le calcul dans l'autre. Vous ne voulez pas bloquer votre traitement juste parce que votre thread principal est bloqué en faisant IO.
Voir mon premier point.
Threading n'est vraiment pas une solution miracle, esp quand il s'agit de l'idée répandue de "utiliser des threads pour faire de ce code d'aller plus vite". Un peu de lecture et d'expérience sera votre meilleur pari. Puis-je recommande d'obtenir une copie de ce livre génial? 🙂
Encore une fois je vais le dire, le filetage est un tout autre concept de JIT. Essayons de regarder à l'exécution d'un programme en termes simples:
Lorsque le JIT a donné le coup:
Comme vous pouvez le voir, quelle que soit la voie que vous suivez, les VM instruction doit être mappé à son natif de contrepartie à un certain point dans le temps. Si ce code natif est stocké pour plus de ré-utiliser ou les jeter si une chose différente (optimisation, vous vous souvenez?).
Donc pour répondre à votre question, à chaque fois que vous écrivez le filetage code, il est traduit en code natif et exécuter par l'OS. Si cette traduction est effectuée à la volée ou regardé jusqu'à ce point dans le temps, c'est une autre question.
start()
méthode est appelée sur un objet Thread, un nouveau système d'exploitation natif thread est créé, il n'y a pas de transmission entre "le fil de Java" et "OS du fil". Aussi, JIT n'est pas obligatoire. Il peut donc arriver que votre fil serait actuellement de l'exécution du code qui n'a pas été JIT ed. JIT est une performance spécifique d'optimisation.Ce n'est pas vrai. Donc pas spécifié, nous voyons souvent, que les threads Java sont en fait de système d'exploitation natif des threads et que multithread applications Java vraiment utiliser des processeurs multi-core ou multi-processeur plates-formes.
Une recommandation commune est à l'aide d'un pool de threads où le nombre de threads est proportionnelle au nombre de noyaux (facteur de 1-1.5). C'est un autre indice, la JVM n'est pas limité à un seul OS thread /processus.
De wkipedia:
Maintenant, de retour en 2010 avec Java 7 sous-développement et de Java 8 prévu - sommes-nous vraiment toujours intéressé dans l'historique "fils verts"??
fils verts comme vous le décrire
(planification faite par la JVM sur un
seul thread natif), mais c'est normal
les implémentations de Java sur l'utilisation de l'ordinateur
plusieurs cœurs.
Threading et l'exécution d'un octet de code sont des questions distinctes. Fils verts sont utilisés par la JVM sur les plates-formes qui n'ont pas de support natif des threads. (À mon humble avis, je ne sais pas quelle plate-forme ne prend pas en charge les threads).
Byte code est interprété en temps réel et exécuté sur la plate-forme native par la JVM. JVM décide quels sont les plus populaires des fragments de code et effectue donc appelé tout à l'heure de la compilation de ces fragments, afin de ne pas avoir à les compiler, encore et encore. Ceci est indépendant sur le filetage. Si par exemple vous avez un thread qui exécute la même fragment de code dans la boucle de vous ce fragment sera mis en cache par le juste à temps compilateur.
Bas de ligne: ne vous inquiétez pas au sujet de la performance et les threads. Java est assez forte pour exécuter tout ce que vous êtes de codage.