Les listes de diffusion sont un moyen courant d'accélérer l'allocation en réutilisant la mémoire existante déjà allouée. Existe-t-il un moyen d'utiliser des listes libres dans un allocateur concurrent, sans encourir la surcharge d'un verrou pour chaque allocation (ce qui neutraliserait le gain de performance prévu de la liste de diffusion)?Listes avec allocateurs simultanés
0
A
Répondre
1
Utilisez un lock-free linked list.
0
Vous pouvez avoir des blocs de liste libre spécifiques au thread.
Fondamentalement, il existe un système qui remplit les listes libres (par exemple un garbage collector). Chaque thread pourrait alors avoir son propre bloc de liste libre, contenant un petit nombre d'entrées. Le verrouillage serait utilisé pour allouer un nouveau segment. Avec des blocs de 30 entrées, vous ne verrouillez qu'une fois toutes les 30 allocations. Inversement, avec des blocs spécifiques à un thread, vous devrez peut-être exécuter le GC plus tôt, car la liste partagée pourrait devenir vide même si certaines parties spécifiques à un thread ont encore des entrées libres.
Questions connexes
- 1. Allocateurs conformes à la norme STL
- 2. Callbacks asynchrones simultanés
- 3. Appels simultanés de CDR
- 4. ASP.NET Ajax PageMethods simultanés
- 5. Publication d'objets simultanés
- 6. AVCaptureVideoDataOutput et AVCaptureMovieFileOutput simultanés
- 7. comparant les listes avec des listes
- 8. problème avec les listes?
- 9. aide avec des listes?
- 10. problème avec les listes
- 11. Modélisation de plusieurs états simultanés
- 12. Curl: GET et POST simultanés
- 13. Formulaires Web pour 100-200k utilisateurs simultanés avec node.js
- 14. "Listes de tranches" et "l'ellipse" en Python; Tranches de listes et listes de listes avec listes de tranches
- 15. listes à trier, avec des listes à trier
- 16. listes et sous-listes
- 17. ObjectDataSource avec les listes composites
- 18. listes en python, avec références
- 19. Référence circulaire avec listes python
- 20. Listes d'arguments variables avec boost?
- 21. MongoDB listes avec des paginations?
- 22. StackOverflowException avec de grandes listes
- 23. NMock Problème avec les listes
- 24. MS Access utilisateurs et transactions simultanés
- 25. Entity Framework plusieurs types hérités simultanés
- 26. Gestion de N téléchargements HTTP simultanés
- 27. Problèmes simultanés et NSOperations Queueing non simultanées
- 28. Expédier des projets simultanés dans fogbugz
- 29. Django - Obtention du dernier objet créé, filtres simultanés
- 30. Liste des listes de listes
Est-ce que c'est vraiment une victoire de performance sur un verrou, je crois comprendre que les structures de données sans verrou ont toujours approximativement la même vitesse qu'une variante verrouillée (mais perd le potentiel pour des blocages, etc.)? –
S'il y a peu de conflit, une implémentation sans verrouillage devrait surpasser l'utilisation d'un verrou (lecture-modification-écriture au lieu d'un verrou-lecture-modification-écriture-déverrouillage), surtout si l'utilisation du verrou. En cas de conflit important, l'implémentation sans verrou peut avoir des performances moins bonnes (en raison de devoir reculer et réessayer à plusieurs reprises) mais dans ce genre de situation, vous ne gagnez rien en ayant plusieurs threads avec une implémentation verrouillée La liste de liens est la majorité de votre travail, la majorité de votre travail serait sérialisé de toute façon. – moonshadow