2011-02-17 6 views
1

Il semble que les spinlocks ne sont pas géniaux car ils gaspillent des cycles CPU quand ils attendent (blocage). Si le fil se met simplement en veille en attendant qu'un signal s'éveille, les cycles du processeur ne sont pas perdus pendant la rotation.Quand est-ce une bonne idée d'utiliser un spinlock?

Peut-être qu'il est bon d'utiliser un verrou tournant si les verrous sont maintenus pendant très peu de temps, alors peut-être qu'il utilise moins de temps? Si c'est vrai, pourquoi?

+0

Vous pouvez vérifier l'entrée wikipedia (http://en.wikipedia.org/wiki/Spinlock) sur ce sujet. Cela semble très instructif. :) – gbvb

Répondre

3

Oui, c'est correct.

Parce que les commutateurs de contexte sont coûteux. Le système d'exploitation et le processeur doivent faire un (relativement) gros travail pour effectuer un changement de contexte. La rotation de quelques cycles sera beaucoup moins coûteuse, même si ces cycles sont, en théorie, gaspillés.

1

Les Spinlocks sont plus rapides quand ils ne bloquent pas, c'est pourquoi ils sont utiles dans les situations où il y a très peu de contention dans le verrou (c'est-à-dire un très faible risque de blocage).

Lorsqu'un thread est en veille, il provoque un changement de contexte (c'est-à-dire que ce thread est remplacé par un autre afin que l'autre thread puisse s'exécuter). Il y a aussi des frais généraux plus élevés pour l'acquisition d'un mutex standard que pour vérifier si un spinlock est libre. Très souvent, les spinlocks ne nécessitent qu'une seule opération atomique lorsque le verrou est libre.

Ces propriétés rendent les verrouillages utiles pour le verrouillage à granularité fine, car l'utilisation de verrous plus petits réduit la contention sur chaque verrou. Par exemple, un de mes projets a une carte avec ~ 200 000 entrées auxquelles 16 + threads accèdent en même temps (type de serveur d'entreprise). Avoir un spinlock par entrée est assez efficace parce que la chance que deux threads dans cette application essayent de frapper la même entrée en même temps est faible.

0

Les Spinlocks permettent un appel serré et des wakeups plus rapides lorsque le verrou devient disponible. Ils sont également bons pour les serrures non-contestées comme @Chris a indiqué. Je dirais que les verrous de spin utilisation:

  1. Si tout ce que vous aimez est la performance de votre propre application, et ne veulent pas céder aux autres applications et votre application a < = threads que le nombre de cœurs. Je considèrerais quand même les verrous de tickets pour optimiser les échecs de cache ... ils tournent aussi mais réduisent beaucoup les échecs de cache.

  2. ou, si vos cheveux sont moins soutenu

Questions connexes