Je suis en train de lire un livre qui compare deux façons de mettre en œuvre des threads, des threads de middleware et des threads de système d'exploitation. Je ne sais pas ce que le sens de ces phrases sont exactement:.. « Une difficulté du système d'exploitation multithreading, cependant, est en tête des performances Comme il est le système d'exploitation qui est impliqué dans les discussions de commutation, cela implique des appels système Ce sont généralement plus coûteux que les opérations de thread exécutées au niveau de l'utilisateur, où le middleware transactionnel fonctionne. " et Quelle est la relation entre les appels système et les performances?Quelles sont les difficultés du système d'exploitation multithreading?
Répondre
le livre est probablement un peu daté, fils de middleware (fibres aka) étaient populaires abo il y a 10 ans. Oui, les commutateurs de contexte sont relativement chers, entre 2000 et 10 000 instructions CPU. Ils nécessitent une transition du noyau et l'acquisition d'un verrou global. Le thread utilisateur peut éviter une grande partie de ce coût, seul l'état de l'UC doit être changé.
Mais cela ne vient pas gratuitement:
- Vous devrez créer votre propre planificateur
- Lorsqu'un thread bloque l'utilisateur sur une opération d'E/S, tous les fils de l'utilisateur bloqueront
- Un commutateur de contexte utilisateur souffle sur le cache du processeur.
Ce dernier problème est le plus important, le soufflage de la mémoire cache est très coûteux. Les cœurs de CPU sont devenus si rapides par rapport à la mémoire que le coût de la suppression du cache devient comparable à un changement de contexte du système d'exploitation. Et obtenir beaucoup de cœurs de processeur est bon marché.
Pour la plupart des systèmes d'exploitation modernes. (Windows, * nix, MAC OS), le noyau du système d'exploitation réside dans un espace d'adressage protégé. Et pour maintenir l'intégrité de cet espace protégé, cet espace ne peut être entré qu'à partir de l'espace utilisateur à des emplacements connus. Il est donc un peu plus coûteux de faire un appel dans le système d'exploitation que de faire un appel de fonction ordinaire dans l'espace utilisateur. http://en.wikipedia.org/wiki/System_call. Le processeur 286 était assez lent pour passer de l'espace utilisateur à l'espace noyau, mais les architectures CPU plus récentes, telles que x86 et IA64 ont des instructions spéciales spécialement conçues pour faire la transition entre l'espace utilisateur et l'espace noyau aussi rapidement que possible. et bien qu'il soit encore plus cher qu'un appel de fonction normal dans l'espace utilisateur, je ne pense pas justifie le niveau de préoccupation que ce livre indique.
Comme le texte cité dit, les appels système sont généralement plus coûteux qu'une opération de fil au niveau de l'utilisateur.
Certaines choses qui peuvent faire un appel système coûteux (par rapport à un appel de fonction au niveau utilisateur):
- sauvegarde/restauration de l'état processeur
- mise à jour de l'environnement de la mémoire virtuelle pour l'accès à l'espace du noyau
- lorsque l'appel système est terminé, il peut y avoir un voyage à travers le planificateur OS
pourquoi cela peut-il se produire? "enregistrement/restauration de l'état du processeur" – ghedas
- 1. Quelles sont les classes système de Java?
- 2. Quelles sont les limites du refactoring?
- 3. Quelles sont les capacités du framework WebKit
- 4. Quelles sont les applications réelles du rendement?
- 5. Quelles sont les alternatives OpenID
- 6. Quelles sont les modifications empilables?
- 7. Quelles sont les différences entre le système et les backticks et les tuyaux dans Perl?
- 8. Stockage interne Android - quelles sont les limites?
- 9. Quelles sont les implications de portabilité de l'utilisation du NDK?
- 10. Quelles sont les causes de blocage du Cabinet Tokyo
- 11. Quelles sont les fonctions utiles pour dessiner du texte (MFC)?
- 12. Quelles sont les nouvelles fonctionnalités du navigateur disponibles aujourd'hui?
- 13. Quelles sont les causes du code de sortie JVM 10?
- 14. Quelles sont les règles d'appel du constructeur de la superclasse?
- 15. Quelles sont les utilisations pratiques du fichier resx?
- 16. Dans MVC, quelles sont les limitations du contrôleur?
- 17. Quelles sont les étapes pour l'optimisation SQL et les modifications sans refléter le système live?
- 18. Quelles sont les plus belles cartes Silverlight?
- 19. Quelles sont les principales spécifications C/C++?
- 20. Quelles sont les nouvelles fonctionnalités d'Eclipse Helios?
- 21. Quelles sont les options de déploiement RCP?
- 22. Quelles sont les fonctions PHP de "cryptage"?
- 23. Quelles sont les alternatives à ClickOnce?
- 24. Quelles sont les options pour configurer votre système à 3 niveaux
- 25. Quelles sont les méthodes disponibles dans WinAPI pour accéder aux programmes de la barre d'état système?
- 26. Quelles sont les valeurs SPAlert EventTypeBitmask valides?
- 27. php_ldap sur les difficultés SSL
- 28. Quelles sont les causes possibles de JasperException
- 29. Quelles sont les variables initialisées en Delphi?
- 30. Comment faire du multithreading Boost?
Quelle est la question? –
Ceci est mis à jour! – ghedas
Voici un * très * large aperçu des différences http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION002920000000000000000 – zebrabox