Programmation simple ou multi-thread sur un seul processeur principal
Quelqu'un peut-il expliquer si il n'y a vraiment aucun avantage à écrire un multi-fileté morceau de code qui s'exécute sur un processeur unique, avec un seul cœur? E. g., une méthode qui traite les pages d'un document, telles que les pages sont mutuellement exclusifs w/r/t susmentionnés morceau de code.
À première vue, il ne semble pas comme il y en avait un avantage parce que le vrai multi-threading n'est pas possible. I. e., l'OS aurait à changer le contexte le fils de toute façon. Je me demandais juste si le codage quelque chose dans un seul thread, on pourrait en fait être plus efficace.
Clairement, il y a beaucoup de cas où l'écriture multi-threaded code du bon sens, mais encore une fois, ma question devient de savoir si il y a vraiment un avantage lorsque l'application est en cours d'exécution sur un processeur single-core.
EDIT: remarque, que je n'ai pas dit "application", mais plutôt "bout de code" - regarde mon exemple ci-dessus. Clairement, il y a des avantages à avoir une application multi-thread.
source d'informationauteur icfantv
Vous devez vous connecter pour publier un commentaire.
Il y a encore des avantages, mais ils sont un peu de la situation.
Dans de nombreux cas, la chose plusieurs threads vont lui permettre de revendiquer davantage de ressources système à partir d'autres processus. C'est capricieux, à l'équilibre, et chaque thread vous présenter ajoute un peu de surcharge, mais il peut être une raison.
Si vous êtes aux prises avec de multiples potentiellement bloquant ressources - comme e /s de fichier ou l'interface utilisateur de l'interaction, ou autre chose, puis le multithreading peut être vital.
Oui, le multi-threading est utile dans un seul cœur. Si un thread dans une application est bloquée en attente de quelque chose (dire les données de la carte réseau ou en attente pour le disque d'écrire des données), le CPU peut passer à un autre thread pour continuer à travailler.
BeOS a été écrit avec envahissants du multithreading dans l'esprit, alors même qu'un seul core processeurs. Le résultat a été très réactif OS, mais assez difficile d'OS à programme pour.
Sur un processeur simple cœur, une application qui utilise asynchrone (non bloquant) I/O sera légèrement plus efficace que celui qui utilise de multiples blocage des threads, car elle évite la surcharge de la commutation de contexte entre les threads.
Aussi, asynchronous I/O échelles de mieux que de bloquer I/O dans les threads en raison de la surcharge par des e/S supplémentaires opération est minime par rapport à la surcharge de la création d'un nouveau thread.
Cela dit, vous ne devriez généralement pas à un seul thread d'I/O asynchrone dans de nouvelles applications, parce que presque tous les nouveaux processeurs multicœurs. Au lieu de cela, vous devez toujours utiliser les e/S asynchrones, mais de répartir le travail entre un ensemble de threads de travail à l'aide de quelque chose comme un pool de threads. La documentation de votre système vous indiquera le nombre idéal de threads de travail; en général, il est égal au nombre de cœurs de traitement disponibles.