Ne le multi-threading d'améliorer les performances? Comment?
J'entends tout le monde parler de la façon dont le multi-threading permet d'améliorer les performances. Je ne crois pas cela, à moins qu'il y est quelque chose qui m'échappe. Si j'ai un tableau de 100 éléments et traversant, il prend 6 secondes. Quand j'ai diviser le travail entre deux threads, le processeur aurait à passer par la même quantité de travail et donc de temps, sauf qu'ils travaillent simultanément, mais à la moitié de la vitesse. Ne devrait pas multi threading le rendre encore plus lent? Puisque vous avez besoin d'instructions supplémentaires pour la division du travail?
Regardez celui-ci : stackoverflow.com/questions/2856239/...
Si vous avez 4 processeurs par exemple (ce qui est assez fréquent de nos jours, même dans les téléphones intelligents), et que votre programme n'a qu'un seul thread, il n'aura accès qu'à 25% des ressources CPU disponibles. Si vous ne disposez que d'un seul processeur, il ne fera pas une différence.
Il n'est donc pas possible pour un seul thread programme à utiliser tous les cœurs?
Si vous avez 4 processeurs par exemple (ce qui est assez fréquent de nos jours, même dans les téléphones intelligents), et que votre programme n'a qu'un seul thread, il n'aura accès qu'à 25% des ressources CPU disponibles. Si vous ne disposez que d'un seul processeur, il ne fera pas une différence.
Il n'est donc pas possible pour un seul thread programme à utiliser tous les cœurs?
OriginalL'auteur Valentin | 2013-03-08
Vous devez vous connecter pour publier un commentaire.
Pour une tâche simple de l'itération 100 éléments multi-threading la tâche ne sera pas de fournir un avantage de performance.
Une itération de plus de 100 milliards de dollars d'éléments et de faire le traitement sur chaque élément, puis l'utilisation de CPU supplémentaire peut permettre de réduire le temps de traitement. Et des tâches plus complexes seront susceptibles de subir des interruptions en raison de I/O par exemple. Lorsqu'un thread est en sommeil en attendant un périphérique pour compléter I/O (par exemple, une écriture sur le disque, ou une pression sur une touche du clavier), les autres threads peuvent continuer leur travail.
De nombreux périphériques de bureau ne prend pas en charge multithread utilisation. Sur l'exemple de meilleurs disques ont deux non bloquant les voies: pour lire et pour écrire. Cela signifie qu'un seul thread peut écrire à la fois. Matériel de serveur peut avoir plusieurs canaux: seul disque peut avoir quelques connexions SATA ou peut être utilisé en RAID. Dans ce cas, plusieurs threads est plus efficace.
OriginalL'auteur suspectus
Pour les CPU, les tâches qui vous ont plus qu'un seul core de votre processeur, vous pouvez diviser votre travail sur chacun de vos cœurs de processeur. Si vous avez deux cœurs, répartir le travail sur les deux fils. De cette façon, vous avez de threads de travail à pleine vitesse.
Cependant, les threads sont vraiment coûteux à créer, si vous avez besoin d'un assez gros volume de travail pour surmonter le coût initial de créer les threads.
Vous pouvez également utiliser des threads pour améliorer apparu performance (ou de la réactivité) dans une application interactive. Vous exécutez lourds calculs sur un thread d'arrière-plan pour éviter le blocage de l'INTERFACE utilisateur interactions. Vos calculs ne pas terminer plus rapidement, mais votre demande n'a pas ces "blocages" qui font qu'il semble lent et ne répond plus.
OriginalL'auteur Albin Sunnanbo