Multithreading et multiprocessing Flashcards
Quel est l’avantage de la programmation concurrente ou parallèle?
Pour optimiser le temps d’exécution d’un programme il est souvent pertinent d’avoir recours à la programmation concurrente ou parallèle plutôt que séquentielle. Au sein de ce notebook, nous allons passer en revue ces concepts et proposer quelques implémentations sur Python.
Qu’est-ce qu’un processeur?
Un processeur (ou CPU pour Central Processing Unit), est l’un des composants électroniques essentiels que l’on trouve dans nos ordinateurs et qui se charge de l’exécution d’instructions qui lui sont données. Un processeur est principalement défini par 2 caractéristiques : Sa fréquence et son nombre de cœurs. La fréquence associée au processeur correspond au nombre de cycles qu’il est capable de réaliser par seconde. Un processeur peut avoir un ou plusieurs cœurs qui correspondent à des unités de calcul. Un processeur multicoeur pourra exécuter plusieurs tâches simultanément, si ces tâches le permettent, en répartissant les tâches par cœur disponible.
Qu’est-ce qu’une RAM?
La RAM pour Random Access Memory correspond à la mémoire vive d’un ordinateur. C’est un espace de stockage temporaire. Le système accède à cette mémoire de façon instantanée ce qui permet la fluidité de l’interface.
Qu’est-ce qu’un processus?
On appelle processus un programme autrement dit un ensemble d’instructions qui est en cours d’exécution
Ou est stocké les instructions des programmes?
L’ensemble des instructions d’un programme est stocké sur la RAM de telle sorte à ce que le processeur puisse comprendre ces instructions. A partir de la RAM, le processeur va donc exécuter chaque instruction. On parle de cycle “fetch-execute”, cela signie que le processeur cherche l’instruction puis l’exécute. Il est important de noter que chaque processus est indépendant des autres existants
Qu’est-ce qu’un thread?
Un thread est une sous-partie de processus et correspond à un fil d’exécution d’instructions. Ainsi un processus pourra être composé d’un ou plusieurs threads, qui seront exécutés de façon parallèle ou concurrente.
Quelle est la différence entre un processus et un thread?
Processus et threads sont ainsi des notions très proches mais elles diffèrent sur des éléments clés:
- Chaque processus dispose d’un espace mémoire propre qui lui est alloué. A contrario, tous les threads appartenant à un même processus partagent un espace mémoire.
- Ces propriétés concernant l’allocation de la mémoire influent notamment sur la communication et la rapidité de passage d’un processus ou thread à un autre. En effet, la communication entre threads sera par exemple moins coûteuse qu’une communication entre processus et il sera également plus rapide de passer d’un thread à un autre plutôt qu’un processus à un autre.
- Il est également à noter que la création d’un thread sera moins coûteuse en temps que la création d’un processus à cause de l’allocation de cet espace mémoire propre.
Qu’est-ce qu’une exécution synchrone?
On parle d’exécution synchrone lorsqu’un programme est exécuté en séquentiel. Si l’on considère un fil d’instructions, alors l’exécution de chaque instruction est conditionnée à la fin de l’exécution de l’instruction précédente. Il est important de noter que les instructions portent ici un ordre. L’illustration ci-dessous illustre le fonctionnement en séquentiel.
Qu’est-ce qu’une éxécution asynchrone?
L’exécution asynchrone correspond au fait d’exécuter des nouvelles instructions alors que les instructions précédentes n’ont pas encore fini leur exécution : l’exécution d’une nouvelle instruction ne sera donc plus conditionnée à la complétion de l’instruction précédente
Qu’est-ce que le I/O bound?
On parle de programme I/O bound (limité par les entrées et sorties) lorsqu’il comporte des opérations d’entrées et de sorties qui déterminent principalement son temps d’exécution. Un programme qui comporte de nombreuses opérations de lecture et d’écriture d’informations externes (c’est-à-dire qui ne sont pas stockées au sein la RAM), telles que des saisies utilisateurs ou encore des requêtes adressées à une base de données, pourra être considéré comme I/O bound. Ces opérations vont donner lieu à de l’attente, souvent appelé IOwait, car ces données ne sont pas immédiatement accessible par le CPU. L’exécution du reste des instructions va donc être mise en pause en attendant l’obtention de ces informations.
Qu’est-ce que permet la programmation asynchrone?
La programmation asynchrone vise à combler les temps d’attente d’un programme I/O bound. A titre d’exemple, lorsque l’on attend une réponse suite à une requête (opération I/O), si le programme est asynchrone, il est possible de lancer d’autres requêtes alors que le résultat de la première est toujours en attente. Il faut néanmoins rester vigilant car le “multitasking” permis par la programmation asynchrone peut parfois faire diminuer les performances car il peut s’avérer coûteux en temps. Pour désigner le passage d’une tâche à une autre, on fera souvent référence à la notion de “context-switching” : passser d’un thread ou d’un processus à un autre.
Qu’est-ce que le CPU bound?
On dit qu’un ensemble d’instructions est CPU bound lorsque le temps d’exécution global est limité par les performances du CPU. Cela est notamment le cas d’un programme qui comporte de nombreux calculs matriciels. Ainsi plus le processeur sera performant, plus l’exécution du programme sera rapide.
Qu’est-ce que le parrallélisme?
On parle d’exécution parallèle lorsque des tâches sont exécutées et progressent simultanément et indépendamment. Il peut s’agir de threads ou de processus.
Qu’est-ce que la concurrence?
On parle d’exécution concurrente lorsque plusieurs tâches progressent dans un même intervalle de temps mais s’exécutent en différé. Ce délai est bien souvent infime ce qui donne l’illusion d’une exécution simultanée. Rappelons néanmoins qu’un coeur de CPU ne peut exécuter qu’une tâche à la fois et que c’est l’exploitation des temps de latence qui donnent l’illusion de simultanéité. A titre d’exemple, une seconde tâche peut être éxecutée suite à l’exécution d’une première qui est toujours en cours de complétion.
Que choisir entre un thread et un processus?
Il n’existe pas de règle générale pour faire un choix entre threads et processus, néanmoins souvent il sera pertinent de choisir :
Plusieurs threads et une programmation concurrente lorsque le programme est I/O bound; Plusieurs processus et une programmation parallèle lorsque le programme est CPU bound.