J'ai été chargé d'écrire un service de haute performance et de haute disponibilité qui s'exécutera sur un boîtier multicœur. Dois-je utiliser la bibliothèque de tâches parellel pour vraiment utiliser un serveur multicœur ou le service s'exécutera-t-il automatiquement plus rapidement si je lui envoie plus de matériel (cœurs)? Est-ce que le framework .NET fournit la magie pour moi sous les couvertures? En corollaire, y aura-t-il des gains de performance en mettant à jour le serveur avec plus de cœurs (en conservant la même spécification de chaque cœur) pour les applications .NET qui n'utilisent pas TPL? Selon mon interprétation (en parcourant le livre de Joe Duffy et ses blogs), vous avez vraiment besoin de programmer pour multicore. Ma conclusion est-elle exacte?Prise en charge de .NET Framework pour le matériel multicœur
Répondre
Il est difficile de répondre avec précision puisque le traitement parallèle n'est pas un problème générique. Vous devrez analyser votre projet pour trouver des endroits où vous pouvez tirer parti du traitement parallèle.
Si votre application peut être facilement décomposée en tâches indépendantes concrètes, le traitement parallèle va définitivement s'améliorer. Si sa nature est principalement sérielle, plusieurs noyaux/threads ne seront pas vraiment utiles.
Si vous avez déterminé que les tâches parallèles représentent le cœur de votre processus, une bibliothèque parallèle peut vous aider à effectuer les tâches de base et à faciliter l'exécution.
Jetez un oeil à PLinq qui viendra. Net 4.0. Il vous donnera beaucoup de capacités de traitement en parallèle sans avoir besoin de gérer les algorithmes de tâches/charges.
Oui, j'attends avec impatience PLinq et .NET 4.0. Ils ont fait du très bon travail dans ce domaine. Malheureusement je ne peux pas risquer la version alpha du cadre pour la production – Sprash
Un programme doit avoir plusieurs chemins d'exécution pour exploiter quoi que ce soit de plus de 1 cœur/processeur. En général, cela se fait en exécutant plus d'un thread, car la seule façon de fournir plus que le chemin d'exécution de la plupart des OS est soit en exécutant plusieurs processus (exécutables) ou plusieurs threads au sein d'un processus.
Il existe plusieurs abstractions de haut niveau construites dans des langages modernes pour traiter plus facilement de ce qui est essentiellement du multi-threading, mais mieux apprendre les bases en premier; Threads
Oui, mon application est certainement multi-threadée. Est-ce que le simple fait de créer des threads tirera parti du matériel multi-core? – Sprash
Lorsque vous parvenez à diviser le code que vous voulez exécuter, à exécuter en plusieurs threads, alors oui - le système d'exploitation prendra soin d'exécuter les threads sur différents cœurs. Bien sûr, le multithreading doit être fait très soigneusement, vous ne voulez pas vous retrouver avec des condiftions de course, des blocages, des incohérences de données, etc. – nos
Merci Paul. Mon application aura certainement une certaine quantité de parallélisme et l'application sera multithread. La création de threads tirera-t-elle parti du matériel multicœur? Est-ce que le framework (ou OS?) Décide s'il peut (ou devrait) exécuter un thread sur un autre noyau, ou ai-je besoin de le programmer explicitement? – Sprash
Utilisez simplement des discussions. Le système d'exploitation prendra en charge l'utilisation des cœurs. ** Ceci est une réponse trop simpliste. Si vous êtes sur le point d'aborder un gros projet comme celui-ci, il vaut la peine de lire "Programmation simultanée sur Windows" http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie = UTF8 & s = books & qid = 1246579844 & sr = 8-1 –