Question

envisager un programme avec nombre de threads optimal fonctionnant sur le serveur dédié, de sorte que si un thread est verrouillé, il ne sommes pas d'autres (presque) en attente de temps CPU. ne se bloque de rotation offrent de meilleures performances que mutex dans tous les cas possibles dans de telles circonstances?

[EDIT] quelques explications: car il n'y a pas de compétition pour le temps CPU entre les fils, le fil peut utiliser le verrouillage de rotation w / o un impact sur les autres performances du fil. et le verrouillage de rotation ne passe pas en mode d'attente qui peut être assez lourd (au moins sur les fenêtres, idk comment il fonctionne sur linux)

Était-ce utile?

La solution

Votre prémisse est pas très réaliste. Peut-être que votre processus a le nombre optimal de fils, le reste du système d'exploitation a plusieurs centaines de autres threads. Dont certains pourraient être prêts à courir et se fera un plaisir de saisir un noyau CPU lorsque vos rendements de fil. En outre, si le fil est sur le point d'être bloqué, il est susceptible de se produire à cause d'un verrou tenu par l'un des autres threads dans votre processus. Ce qui pourrait le libérer pendant le temps d'attente de spin. Le nombre de threads est pas pertinent pour cela. Il a donc encore un sens spin attente.

Autres conseils

Je pense que spinlock fonctionnera mieux dans ce cas, de mutexe ne sont pas vraiment nécessaires, sauf si vous essayez d'optimiser votre code et cela dépend de différents temps pour E / S etc ... Vous avez également un bon point d'attendre Mode.

Spinlock serait probablement plus optimale, car il n'y a pas de transition à noyau. Mais le scénario est si arrangea que je vous suggère de ne jamais tenter de l'appliquer au code de la vie réelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top