Les threads et les processus sont des termes dans le système d'exploitation. En termes simples, chaque application a son propre processus.
Le système d'exploitation allouera certaines ressources d'exécution à ces processus, comme l'espace mémoire, etc. Au cours du processus, certains threads peuvent être créés, ils partagent ces espaces mémoire et sont appelés par le système d'exploitation pour le calcul parallèle.
Nous savons tous que les systèmes d'exploitation modernes tels que Mac OS X, UNIX, Linux, Windows, etc. peuvent exécuter plusieurs tâches en même temps. Par exemple, vous surfez sur Internet à l'aide d'un navigateur, tapez du code et écrivez un blog dans Markdown. Il s'agit d'un travail multitâche. Au moins trois tâches sont exécutées en même temps. Bien sûr, de nombreuses tâches s’exécutent silencieusement en arrière-plan en même temps, mais elles ne sont pas affichées sur le bureau. Pour le système d'exploitation, une tâche est un processus. Par exemple, ouvrir un navigateur signifie démarrer un processus de navigateur, ouvrir PyCharm signifie démarrer un processus PtCharm et ouvrir Markdown signifie démarrer un processus Md.
Bien que les processeurs multicœurs soient désormais très populaires. Cependant, étant donné que le code d'exécution du processeur est exécuté de manière séquentielle, nous nous poserons des questions à ce stade : comment un processeur monocœur effectue-t-il plusieurs tâches ?
En fait, le système d'exploitation exécute à tour de rôle chaque tâche alternativement. La tâche 1 s'exécute pendant 0,01 seconde, passe à la tâche 2, exécute la tâche 2 pendant 0,01 seconde, puis passe à la tâche 3, s'exécute pendant 0,01 seconde... et bientôt. En apparence, chaque tâche est exécutée alternativement. Cependant, comme la vitesse d'exécution du processeur est si rapide, nous ne pouvons pas la reconnaître à l'œil nu et avoir l'impression que toutes les tâches sont exécutées en même temps.
Une véritable exécution parallèle du multitâche ne peut être réalisée que sur un processeur multicœur. Cependant, comme le nombre de tâches est bien supérieur au nombre de cœurs de processeur, le système d'exploitation planifiera automatiquement de nombreuses tâches sur chaque cœur à tour de rôle. exécution.
Certains processus font plus qu'une seule chose, comme les navigateurs. Nous pouvons lire des vidéos, lire des audios, lire des articles, éditer des articles, etc. En fait, ce sont toutes des sous-tâches du processus de navigation. Au sein d'un processus, si vous souhaitez effectuer plusieurs choses en même temps, vous devez exécuter plusieurs « sous-tâches » en même temps. Nous appelons ces « sous-tâches » dans les threads du processus.
Puisque chaque processus doit faire au moins une chose, un processus a au moins un thread. Bien entendu, un processus peut également avoir plusieurs threads, et plusieurs threads peuvent être exécutés en même temps. La méthode d'exécution du multi-thread est la même que celle de plusieurs processus. Le système d'exploitation bascule également rapidement entre plusieurs threads, permettant à chacun. thread pour s'exécuter temporairement en alternance et il semblera qu'ils soient exécutés simultanément.
Alors, que devons-nous faire si nous voulons effectuer plusieurs tâches en même temps en Python ?
Il existe deux solutions :
La première consiste à démarrer plusieurs processus. Bien que chaque processus n'ait qu'un seul thread, plusieurs processus peuvent effectuer plusieurs tâches ensemble.
Une autre méthode consiste à démarrer un processus et à démarrer plusieurs threads en un seul processus, afin que plusieurs threads puissent effectuer plusieurs tâches ensemble.
Bien sûr, il existe une troisième méthode, qui consiste à démarrer plusieurs processus, et chaque processus démarre plusieurs threads, afin que davantage de tâches puissent être exécutées en même temps. Bien entendu, ce modèle est plus complexe et est rarement utilisé dans la pratique.
Pour résumer, il existe trois façons de mettre en œuvre le multitâche :
Mode multi-processus ;
Mode multi-thread ;
Mode multi-processus + multi-thread ;
Exécutez plusieurs tâches en même temps. Habituellement, les tâches ne sont pas sans rapport, mais doivent communiquer et se coordonner les unes avec les autres. Parfois, la tâche 1 doit être mise en pause et attendre que la tâche 2 soit terminée avant de pouvoir continuer à s'exécuter. la tâche 3 et la tâche 4 ne peuvent pas être exécutées simultanément, de sorte que la complexité des programmes multi-processus et multi-thread est beaucoup plus élevée que celle du programme mono-processus et mono-thread que nous avons écrit plus tôt.
En raison de la grande complexité et de la difficulté du débogage, nous ne voulons pas écrire du multitâche à moins que nous y soyons obligés. Cependant, il arrive souvent qu’il soit impossible de se passer du multitâche. Pensez à regarder un film sur un ordinateur. Un thread doit lire la vidéo et un autre thread lit l'audio. Sinon, si elle est implémentée dans un seul thread, la vidéo ne peut être lue qu'en premier, puis l'audio, ou l'audio doit être lu en premier. et puis la vidéo, ce n'est évidemment pas possible.
section suivante