A pesquisa refere-se à verificação repetida se um recurso ( qualquer tipo de recurso) está pronto.
Um spinlock é quando o recurso que você está pesquisando é um bloqueio.
Observe que a pesquisa não é ruim. Em particular, a pesquisa é eficiente quando geralmente há dados prontos quando você pesquisa. A pesquisa é apenas ineficiente se você fizer isso sem obter nenhum dado em troca.
Por outro lado, as interrupções são ineficientes se houver tantos dados que você é constantemente interrompido. Eles são eficientes se os dados chegarem raramente o suficiente para que você possa realmente realizar algum trabalho útil antes de ser interrompido.
Posso dar um exemplo da vida real a partir de minha própria experiência: 15 anos atrás, eu tinha meu programa de e-mail configurado para me interromper toda vez que um novo e-mail entra. O que acontecia uma ou duas vezes por semana. Verificar constantemente minha caixa de entrada seria uma perda colossal de tempo.
Atualmente, tenho todas as notificações desativadas. Eu sei que sempre que eu olhar para minha caixa de entrada, haverá novos e-mails lá. A pesquisa é muito mais eficiente agora.
Spinlocks são eficientes quando: a) a probabilidade de a trava é baixa eb) se a trava for realizada, ela será mantida apenas por um curto período de tempo. Em outras palavras: é eficiente para bloqueios de granulação fina não contidos, mas ineficiente para bloqueios de granulação grossa altamente contidos.
(E, é claro, os spinlocks funcionam apenas quando existe um paralelismo verdadeiro; caso contrário, o outro thread não terá a chance de liberar o bloqueio. Acho que isso é óbvio, mas eu queria afirmar de qualquer maneira.)