Il polling si riferisce al controllo ripetuto della disponibilità di una risorsa ( qualsiasi tipo di risorsa).
Uno spinlock è quando la risorsa di cui si esegue il polling è un blocco.
Si noti che il polling non è male. In particolare, il polling è efficace quando di solito sono disponibili dati pronti per il polling. Il polling è inefficiente solo se lo fai senza poi ottenere alcun dato in cambio.
D'altra parte, gli interrupt sono inefficienti se ci sono così tanti dati da essere costantemente interrotti. Sono efficienti se i dati arrivano abbastanza raramente da poter effettivamente svolgere un lavoro utile prima di essere interrotti.
Posso darti un esempio di vita reale per esperienza personale: 15 anni fa, avevo impostato il mio programma di posta elettronica per interrompermi ogni volta che arrivava una nuova e-mail. Che avveniva una o due volte alla settimana. Controllare costantemente la mia casella di posta sarebbe stata una perdita di tempo colossale.
Oggi ho disattivato tutte le notifiche. Io so che ogni volta che guardo la mia casella di posta, ci saranno nuove email lì. Il polling è molto più efficiente ora.
Gli spinlock sono efficienti quando a) la probabilità che il blocco venga preso è bassa eb) se il blocco viene preso, verrà trattenuto solo per un breve periodo. In altre parole: è efficace per serrature a grana fine per lo più non contese, ma inefficiente per serrature a grana grossa altamente contese.
(E, naturalmente, gli spinlock funzionano solo quando c'è un vero parallelismo, altrimenti l'altro thread non avrà la possibilità di rilasciare il lock. Immagino che sia abbastanza ovvio, ma volevo dichiararlo comunque.)