Skip to main content

En fait, il existe de nombreux types d'utilisation de la méta-classe, telles que la manière de définir des paramètres dans MetacClass, ainsi que certains protocoles, V.V. Cependant, cette utilisation est relativement petite, la fréquence est très faible, donc nous , mais plus , vous pouvez découvrir plus de détails lorsque vous l'utilisez. Je veux que les gens comprennent les principes de la métaclasse et de la manière de l'utiliser, puis de connaître les utilisations spécifiques qui seront faciles. Par conséquent, nous avons commencé un nouveau sujet aujourd'hui - multi-filetés et simultanément .


Premièrement, processus et thèmes
de prendre soin de Xiaobai, il suffit de parler

processus et de thème ces deux concepts. Ces deux concepts appartiennent au système d'exploitation et nous écoutons souvent, mais peu de gens peuvent au sens de leur signification. Pour les ingénieurs, les définitions et les différences des deux sont toujours essentielles.


Pour la première fois, le processus peut être considéré comme une tâche spécifique de

exécution de la CPU . ParmiSystèmes d'exploitation, car la CPU fonctionne très rapidement, c'est beaucoup plus rapide que les autres périphériques de votre ordinateur. Exemple: mémoire, disque, v.v. Pour améliorer la performance de l'ordinateur, placez les compétences de l'appareil que possible, la CPU voit le vote. Cela signifie , il effectue uniquement une tâche une fois convertie immédiatement immédiatement après avoir effectué un petit temps de fragmentation et effectuer d'autres tâches.


Donc, dans les premières machines d'élaboration, il semble que les ordinateurs fonctionnent également simultanément. Nous pouvons écouter des chansons tout en écoutant Internet et nous ne nous sentirons pas en carton. Mais en fait, c'est le résultat du vote de la CPU. Parmi ces exemples, logiciels et chansons écoutent des logiciels et Internet incluent le processus d'indépendance de la CPU

. Nous ne pouvons comprendre que le processus d'opération. Par exemple: Dans les téléphones Android, une application correspondra à un processus dans le système. Bien sûr, cette déclaration n'est pas entièrement exacte, une application égalementEst peut commencer plusieurs processus.

Ce processus est destiné aux processeurs et le flux est plus ciblé. Même si la CPU exécute le processus actuel, la tâche de fonctionnement réelle est divisée. Par exemple: étant donné que l'écoute du logiciel Song, nous devons afficher des sous-titres de paroles, vous devez jouer un son, vous devez écouter le comportement de l'utilisateur, tel que vous avez une chanson, ajustez le volume ou le non, et comme ça. Par conséquent, nous avons besoin de
pour diviser le travail de la CPU que cela continue à faire plus de travail grâce à un vote lors de la fabrication du processus actuel. La mission dans le processus est du canal, de ce point, , le processus et le sujet sont liés aux relations
. Un processus peut contenir plusieurs threads. Pour les CPP, le flux ne peut pas être exécuté directement et un débit doit appartenir à un processus. Par conséquent, nous savons que la conversion de processus de la CPU est l'exécutable de l'application ou du logiciel et le débit interne dans le processus converti. Médaillonm est une tâche d'application spécifique dans le logiciel.

L'introduction au processus et au sujet a un modèle classique pour expliquer la relation entre eux, supposons que la CPU soit une usine, il existe de nombreuses usines dans l'usine. Différents ateliers correspondent à différentes tâches de production, à certaines usines de pneus automobiles et à une fabrique de squelette automobile. Mais le pouvoir de la centrale électrique est limité et il ne peut que respecter l'utilisation d'une usine.


Pour faire progresser les gens, l'usine doit se rendre à tour de rôle pour fournir de l'électricité dans chaque atelier.

L'atelier ici est le processus
.

Bien qu'un atelier ne crée qu'un produit, c'est plus qu'un processus. Il peut y avoir des pipes dans un atelier et des tâches de production spécifiques sont en réalité complétées par des tuyaux, chaque tâche correspond à une implémentation spécifique. De même, L'atelier ne pourrait effectuer simultanément un pipeline

. Nous devons donc convertir l'énergie entre la population.NG Ce tube, de sorte que tous les progrès de la production de pipelines soient unifiés.

Ici Parmi les pipelines naturels correspondant au concept de flux , ce modèle est bien interprété avec la relation entre la CPU, le processus et le flux. Le principe réel est en fait, mais la situation dans la CPU est beaucoup plus complexe que le séminaire réel. Parce que pour les processus et les processeurs, les situations qu'elles sont confrontées sont en temps réel. Le tuyau dans l'atelier est X et le moment suivant peut devenir Y.


Après avoir compris le concept de sujets et de processus, il est également utile de comprendre la configuration de l'ordinateur. Par exemple, nous achetons un ordinateur, rencontrons souvent un terme, ce qui signifie que la CPU de cet ordinateur est un certain flux de certains numéros. Par exemple, le premier ordinateur portable que j'ai acheté était de 4 threads de base 8. Cela a vraiment dit que la CPU de cet ordinateur a

Core Computing , mais la technologie superfluente est utilisée, elle peut créer une physique de base simulant deux logiques. cœurs. ÉquationIl peut faire 8 ruisseaux en même temps, équivalent à 8 cœurs, mais il reste encore 4 noyaux qui sont simulés noyau virtuel.

Il y a une question
Pourquoi 4 ruisseaux de base 8 au lieu de 4 processus de base 8? Étant donné que la CPU n'exécute pas directement le processus, cela se fait qu'un thread est dans le processus. Il semble que le séminaire ne produise pas directement de pièces, seuls les tuyaux peuvent créer des pièces. De nombreux ateliers sont plus responsables de la propagation des ressources. Il existe donc un classique très classique dans des manuels scolaires. Les mots sont interprétés: Ce processus est l'unité d'allocation de ressources sombres minimise, le canal est l'unité minimale de la planification de la CPU ]. Lundi, démarrez le thème

Python nous fournit une bibliothèque de flux complète, à travers elle, nous pouvons facilement créer des flux à effectuer plusieurs filetés. Premièrement, nous introduisons le thème du flux, qui est une couche filetée, nous pouvons faire plusieurs filetés en créant une instance d'un fil. Il suffit d'expliquer son utilisation, nous avons passé trois paramètres, nommés cibles, noms et arguments

, nous pouvons deviner leur signification. Le premier est le but, c'est une méthode, ce qui signifie que la méthode que nous voulons faire multi-filetés. Le nom est notre nom pour ce sujet nouvellement créé. Ce paramètre peut être ignoré, s'il est ignoré, le système nommera le système pour cela. Lorsque nous exécutons Python, le flux est appelé entretien et nous pouvons distinguer les noms du fil. Args est le paramètre transmis à la fonction cible.

Donnez un exemple classique:
Nous avons créé une fonction de boucle très simple, utilisée pour faire une boucle pour imprimer des nombres, chaque fois après l'impression, ce sujet dormira pour 5 Quelques secondes, de sorte que les résultats que nous voyons doivent être des lignes sur l'écran toutes les 5 secondes.
from threading import Threadt = Thread(target=func, name='therad', args=(x, y))t.start()
Nous avons déployé à Jupyter:

à la surface, peu importe quoi, nHung a des problèmes, quel est le problème?

La commande de sortie n'est pas
, pourquoi avons-nous le thème principal après avoir imprimé le premier numéro 0? Un autre problème est que le sujet principal est terminé,

Pourquoi le processus Python n'a-t-il pas fini

, imprimant toujours? import time, threading# 新线程执行的代码:def loop(n): print('thread %s is running...' % threading.current_thread().name) for i in range(n): print('thread %s >>> %s' % (threading.current_thread().name, i)) time.sleep(5) print('thread %s ended.' % threading.current_thread().name)print('thread %s is running...' % threading.current_thread().name)t = threading.Thread(target=loop, name='LoopThread', args=(10, ))t.start()print('thread %s ended.' % threading.current_thread().name)

Parce que le flux indépendant, pour le flux principal, il ne restera pas après avoir exécuté T.START () et

ne restera pas, mais ne sera pas fait. À la fin
. Si nous ne voulons pas que le flux principal se termine à ce stade, mais pour arrêter de courir après la fin du sous-flux, nous pouvons ajouter T. Participer () cette ligne dans le code.

Les activités de participation permettent au flux principal de s'accrocher à la section Participation, jusqu'à ce que le sous-sujet soit terminé, continuez de le faire. Nous avons ajouté ce résultat:

C'est ce à quoi nous nous attendions, puis poursuivez après la finition des sous-thèmes d'exécution. Regardez la deuxième question. Lorsque le flux principal se termine, le sous-flux est toujours en marche et trop trPython ne s'échappe pas? En effet, nous créons des flux de niveau utilisateur par défaut, pour le processus, attendra que tous les niveaux d'utilisateur quittent . Ceci est un problème, puis si nous avons créé un flux pour récupérer des données de l'interface, car l'interface n'a pas été renvoyée, le processus actuel attendra-t-il pour toujours?


Ceci est évidemment déraisonnable, afin de résoudre ce problème, nous pouvons mettre le flux créé

Daemon .

Mardi, le thème de la protection du démon
t.start()t.join()print('thread %s ended.' % threading.current_thread().name) est le thème du démon, sa transcription en anglais est vraiment un résident de fond en arrière-plan, afin que nous puissions également comprendre le thème
de fond

Plus pratique de comprendre. Le thème du démon et le niveau de thème de l'utilisateur sont différents. Ce processus ne sera pas proactif d'exécuter le débit de démon,

s'échapper lorsque tous les niveaux d'utilisateur sont terminés. Lorsque le processus se déroule, vous laisserez tomber tous les démon
.

Nous avons passé le fond = paramètre true pour définir LUĐong a formé une chaîne de fond:


Donc, nous allons donc permettre de voir que c'est comme suit:

Vous devez faire attention ici, si vous s'exécute à Jupyter, mais Ne vois pas que ces résultats ne sont pas vus

. Étant donné que le Jupyter lui-même est un processus, il s'agit toujours d'un canal de niveau utilisateur pour survivre pour les cellules de Jupyter, de sorte que le processus ne s'échappera pas. Donc, je veux voir un tel effet, seuls les fichiers Python peuvent être exécutés par la ligne de commande.

Si nous voulons attendre ce sous-sujet, nous devons transférer à la méthode de participation. De plus, pour prévenir les serrures de flux secondaires, nous pouvons également définir l'heure de veille

dans JoIH , le temps d'attente le plus long, n'attendra plus. à manquer de temps pour se lever, lorsque je l'ai mise en jonction, seuls 5 numéros n'exporteront que sur l'écran.


De plus, s'il n'est pas réglé sur un flux d'arrière-plan, mettez le temps d'attente bien que utile, le processus

toujoursIl attendra tous les sous-flux t = threading.Thread(target=loop, name='LoopThread', args=(10, ), daemon=True). Par conséquent, la sortie de l'écran va aimer ceci:

Bien que le sujet principal continue à le faire et à la fin, le sous-débit fonctionne toujours jusqu'à ce que le sous-flux soit en marche.

Introduction Pour participer à l'installation du trou avec un trou, si nous n'avons qu'un seul fil d'attente, s'il y a beaucoup de ruisseaux, nous les mettons avec une boucle à attendre. Ensuite, le sujet principal attendra le temps d'attente N * , où n est le nombre de threads. Étant donné que chaque thread en calculant le temps d'attente est le moment où le dernier fil est hors du temps ou non, il attendra tout le flux de temps hors du temps, les finira ensemble.


Par exemple: j'ai créé 3 flux:

Le résultat de l'écran final est comme celui-ci:


Tous les flux qu'il existaient à 6 secondes et j'ai Dire que cette conception est un peu de fosse, elle est complètement différente de nos attentes.

Résumé

Dans l'article d'aujourd'hui, nous comprenons le système d'exploitation aujourd'hui , le concept de flux et de processus

et comment Python crée un flux et une utilisation liée à la création de sujets. Aujourd'hui, c'est juste l'utilisation et le concept le plus élémentaire. Il existe encore de nombreuses utilisations haut de gamme sur des sujets, nous partagerons avec vous dans les prochains posts.

Multi-threadé est très important dans de nombreuses langues et de nombreuses scènes utiliseront définitivement plusieurs threads. Par exemple:

Web backend Web, tels que les reptiles, tels que le développement de jeux
et tous les autres domaines doivent développer une interface utilisateur. Étant donné que quelque chose lié à l'interface utilisateur, vous aurez certainement besoin d'une page séparée et d'une sortie supplémentaire pour préparer la logique de données et d'application. Par conséquent, la multithreading est un sujet que les programmeurs professionnels ne s'ouvrent pas, et c'est aussi l'un des contenus à maîtriser.

Sujets

Catégories