Le lien vers la documentation indique : Qu'est-ce que le terme
3 Réponses :
Le "thread actuel" est le fil qui appelle Également si un fil dort, il ne bloque pas l'ensemble du noyau de la CPU. Un autre thread peut être exécuté sur le même noyau CPU pendant que votre fil est endormi. P> thread.sleep (délai) code>. p>
Chaque commande de commande et de méthode que vous apportez doit être exécutée par n'importe quel thread. Dans la perspective de ce fil, c'est lui-même le fil actuel. Donc, en d'autres termes: aussi, gardez à l'esprit que la multi-threading et plusieurs noyaux n'ont qu'une relation très lointaine. P>
Même avant que les processeurs multicœurs étaient courants, chaque système d'exploitation a appuyé le multi-threading lourd (ou multi-tâches multiples, qui est fondamentalement la même chose aux fins de cette discussion) Opération. P>
dans le système d'exploitation moderne, cela se fait avec une technique appelée Preemptif multitâche . Cela signifie fondamentalement que le système d'exploitation peut faire une pause de force le processus en cours d'exécution et permettre à un autre de courir pendant une courte période, en fournissant l'illusion d'un traitement parallèle réel. P>
Et depuis que beaucoup de temps dans un processus donné est souvent consacré à l'attente de certains E / S externes (réseau, disque, ...), ce qui signifie même que vous pouvez utiliser le processeur plus efficacement (depuis le moment où un processus serait un processus. Passez à attendre que l'IO Un autre processus puisse passer en calcul réel). P>
Par exemple au moment de la rédaction de cela, mon ordinateur portable a 1311 threads (dont la plupart dorment probablement et seulement une poignée sera réellement courir et / ou attendre de courir), même s'il n'a que 4 noyaux. p>
tl; dr strong> tandis que plusieurs cœurs permettent plus d'un thread d'exécuter à exactement le même temps, vous pouvez avoir une multi-filetage même avec un noyau unique et il y a très peu de différence notable si vous le faites (outre les performances brutes, évidemment) p> thread.sleep (délai) code> pause le fil qui exécute le fil thread.sleep () code> méthode. P>
Le nom, "thread actuel", a été choisi pour la commodité des auteurs du système d'exploitation et non pour les auteurs d'applications qui doivent exécuter sous le système d'exploitation. P>
Dans le code source d'un système d'exploitation, il est logique d'avoir une variable Du point de vue d'un programmeur d'application, tout appel système censé faire quelque chose au "thread de courant", va le faire sur le fil qui fait appel à l'appel. Si un fil qui fonctionne sur CPU 3 appels du point de vue de l'application, En général, vous devez substituer "l'appelant" ou "le fil d'appel" à tout moment que vous voyez "thread actuel" dans n'importe quel document API. P> actuelle_thread [cpu_id] code> qui pointe vers une structure de données décrivant le fil qui exécute sur ce CPU_ID < / code> à un moment donné. P>
thread.sleep (n) code>, le système d'exploitation recherchera actuel_thread [3] code> (c.-à-d. Le fil qui a apporté l'appel) et mettre ce fil à dormir. p>
thread.sleep (n) code> est une fonction qui apparaît ne em> ne prend rien n) code> millisecondes pour le faire. P>
Le thread actuel est celui qui exécute
thread.sleep code>. Mais il semble que vous impliquiez que les fils et les cœurs ont une relation 1/1 ...Il convient de dire que le nombre de cœurs a à peine quelque chose à voir avec le nombre de fils. Même sur un seul processeur principal, vous pouvez exécuter plusieurs applications en même temps, chacune avec son propre thread ou plusieurs threads.
"Actuellement" comme dans "celui qui exécute actuellement l'appel en cours de documentation". La sommeil fonctionne toujours sur le thread actuel, vous ne pouvez pas faire dormir un autre fil.