Polling si riferisce a controllare ripetutamente se una risorsa ( qualsiasi tipo di risorsa ) è pronta.
Uno spinlock si ha quando la risorsa che stai interrogando è un blocco.
Nota che il polling è non cattivo. In particolare, il polling è efficiente quando di solito i dati sono pronti quando si esegue il polling. Il polling è solo inefficiente se lo fai senza ricevere in cambio alcun dato.
D'altra parte, gli interrupt sono inefficienti se ci sono così tanti dati che vengono 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 dalla mia esperienza personale: 15 anni fa, avevo il mio programma di posta elettronica impostato per interrompermi ogni volta che arriva una nuova email. Che accadeva una o due volte alla settimana. Controllare costantemente la mia casella di posta sarebbe stata una colossale perdita di tempo.
Al giorno d'oggi, ho tutte le notifiche disattivate. conosco che ogni volta che guardo nella mia casella di posta elettronica, ci saranno nuove e-mail. Il polling ora è molto più efficiente.
Gli spinlock sono efficienti quando a) la probabilità che il blocco venga preso è bassa, e b) se il blocco viene preso, sarà trattenuto solo per un breve periodo. In altre parole: è efficiente per serrature a grana fine per lo più incontrollate, ma inefficiente per serrature a grana grossa molto contese.
(E, naturalmente, gli spinlock funzionano solo quando esiste il vero parallelismo, altrimenti l'altro thread non avrà la possibilità di rilasciare il blocco. Immagino che sia ovvio, ma volevo farlo comunque).