Boucles Parallel.ForEach imbriquées
J'ai un code que je suis en train de l'optimisation de la simultanéité dans les architectures multicœurs. Dans une de mes classes, j'ai trouvé un imbriquée foreach
boucle. Fondamentalement, la boucle externe parcourt un tableau de NetworkInterface
objets. L'intérieur de la boucle itère si le réseau adresses IP des interfaces.
Il m'a fait penser, c'est d'avoir Imbriqué Parallel.ForEach
boucles forcément une bonne idée? Après la lecture de cet article (Imbriquée Parallèle.Les Boucles ForEach sur la même liste?) je suis toujours pas sûr de ce qui s'applique lorsque en termes d'efficacité et de conception en parallèle. Cet exemple est d'environ Parallel.Foreach
consolidés appliqués à une liste où les deux boucles sont de réaliser des opérations sur cette liste.
Dans mon exemple, les boucles sont en train de faire des choses différentes, donc, dois-je:
- Imbriquer Parallèle.Les boucles ForEach?
- Utilisateur Parallèle.ForEach sur le parent de la boucle et de laisser la boucle interne en tant que-est?
source d'informationauteur series0ne
Vous devez vous connecter pour publier un commentaire.
Un Parallèle.ForEach n'est pas nécessairement exécuter en parallèle -- c'est juste une demande à faire, si possible. Par conséquent, si l'environnement d'exécution n'a pas la puissance du PROCESSEUR pour exécuter les boucles en parallèle, il ne le fera pas.
Si les actions sur les boucles ne sont pas liés (c'est à dire, si ils sont séparés et ne pas s'influencent les uns les autres), je ne vois pas de problème à l'aide de Parallèles.ForEach à la fois sur l'intérieur et l'extérieur des boucles.
Cela dépend vraiment de l'environnement d'exécution. Vous pourriez faire de synchronisation tests si votre environnement de test est assez similaire à l'environnement de production, et ensuite déterminer ce qu'il faut faire. En cas de doute, tester 😉
Bonne chance!
La réponse sera, elle dépend;
Les Threads ne sont pas bon marché, ils prennent le temps de créer, et de mémoire d'exister. Si vous ne faites pas quelque chose de gourmand en ressources avec les Adresses IP, et d'utiliser le mauvais type de collection pour l'accès simultané, vous êtes presque certainement ralentir votre application.
Utilisation
Chronomètre
pour vous aider à répondre à ces questions.