Compréhension de la différence entre la programmation mono-thread et multi-thread
J'ai une incompréhension de la différence entre les mono-thread et multi-threading de programmation, donc je veux une réponse à la question suivante pour rendre les choses claires.
Supposons qu'il y a 9 tâches indépendantes et j'ai envie de les réaliser avec un seul thread programme et un programme multi-threadé. Fondamentalement, il sera quelque chose comme ceci:
Single-thread:
- Execute task 1
- Execute task 2
- Execute task 3
- Execute task 4
- Execute task 5
- Execute task 6
- Execute task 7
- Execute task 8
- Execute task 9
Multi-thread:
Thread1:
- Execute task 1
- Execute task 2
- Execute task 3
Thread2:
- Execute task 4
- Execute task 5
- Execute task 6
Thread3:
- Execute task 7
- Execute task 8
- Execute task 9
Que je comprends, seulement UN fil sera exécutée à un moment (obtenir le CPU), et une fois que le quantum est fini, le planificateur de threads donnera le temps de calcul à un autre thread.
Ainsi, le programme qui sera terminée plus tôt? Est-ce que le programme multi-threadé (logiquement)? ou est-il le seul thread programme (depuis le multi-threading a beaucoup de commutation de contexte qui prend un certain temps)? et pourquoi? J'ai besoin d'une bonne explication s'il vous plaît 🙂
source d'informationauteur Eng.Fouad
Vous devez vous connecter pour publier un commentaire.
Il dépend.
Combien de processeurs avez-vous? Combien d'e/S est impliqué dans vos tâches?
Si vous avez seulement 1 cpu, et les tâches ont pas de blocage I/O, puis le mono-thread va finir égal à ou plus rapide que le multi-thread, car il est au-dessus de la commutation de threads.
Si vous avez 1 cpu, mais les tâches impliquent beaucoup de blocage I/O, vous pouvez voir une accélération en utilisant le filetage, en supposant que le travail peut être fait lors de l'I/O est en cours.
Si vous avez plusieurs processeurs, vous devriez voir une accélération avec le multi-thread en œuvre de la mono-thread, depuis plus de 1 thread peut exécuter en parallèle. À moins bien sûr que les tâches sont I/O dominé, dans lequel cas, le facteur limitant est votre vitesse de l'appareil, pas de puissance cpu.
Ce qui serait le cas si le CPU n'avaient qu'un seul cœur. Les Processeurs modernes ont plusieurs noyaux, et peut exécuter plusieurs threads en parallèle.
L'exécution du programme, trois fils irait presque trois fois plus vite. Même si les tâches sont indépendantes, il y a encore quelques ressources dans l'ordinateur qui doit être partagé entre les threads, comme l'accès à la mémoire.
Bien, ce n'est pas tout à fait la langue agnostique. Certains interpréter les langages de programmation ne prennent pas en charge réelle de Threads. Qui est, les threads d'exécution peut être défini par le programme, mais l'interprète est mono-thread, donc tous d'exécution est sur un seul cœur de PROCESSEUR.
Pour les langages compilés et des langues support multi-threading, un seul PROCESSEUR peut avoir de nombreux cœurs. En fait, la plupart des ordinateurs de bureau maintenant avoir 2 ou 4 cœurs. Ainsi, un programme multi-threadé l'exécution de vraiment indépendant tâches de finition de 2 à 4 fois plus rapide basé sur le nombre de cœurs du PROCESSEUR.
Hypothèse Ensemble:
Single-core sans hyperthreading;
les tâches sont liées à l'UC;
Chaque tâche de prendre 3 quanta de temps;
Chaque planificateur de répartition est limitée à 1 quanta de temps;
FIFO planificateur de Nonpreemptive;
Tous les threads frappé le planificateur en même temps;
Tous les changements de contexte ont besoin de la même quantité de temps;
Processus sont délimitées comme suit:
Avec les hypothèses ci-dessus, ils finissent tous en même temps. C'est parce qu'il est un identicle quantité de temps que prévu pour le CPU, les changements de contexte sont identicle, il n'y a pas de gestion des interruptions, et rien n'est en attente pour IO.
Pour plus de profondeur sur la nature de ce, s'il vous plaît trouver ce livre.