Afinidade de processador
# Afinidade de processador

Afinidade de processador permite vincular ou desvincular um processo ou thread para uma unidade central de processamento (CPU) ou uma coleção de CPUs, de forma que somente as designadas o executem ao invés de qualquer outra. Isso pode ser entendido como uma modificação do algoritmo de escalonamento de processos nativos de um sistema operacional com multiprocessamento simétrico. Cada item na fila tem uma etiqueta indicando seu processador parente. No momento de alocação de recursos, cada tarefa é alocada para seu processador parente em preferência aos demais.$^[$
A afinidade de processador se beneficia do fato que remanescentes de um processo que foi executado em um processador específico podem continuar no seu estado (por exemplo, dados no cache) depois que outro processo tenha side nele executado. Agendar um processo que usa intensamente a CPU com poucas interrupções para ser executado no mesmo processador pode melhorar sua performance por diminuir eventos degradantes, como ausência de conteúdo no cache, mas pode frear programas comuns porque eles podem precisar esperar aquela CPU se tornar disponível novamente. Um exemplo prático de afinidade de processdor é executar múltiplas instâncias de uma aplicação não dividida em threads, como software de renderização gráfica. $^[$
Implementações de algoritmos de escalonamento de processos variam em aderência à afinidade de processador. Em certas circunstâncias, algumas permitem que uma tarefa troque para outro processador se isso resulta em maior eficiência. Por exemplo, quando duas tarefas de processamento intenso (A e B) têm afinidade para um processador enquanto outro se mantém inutilizado, muitos escalonadores vão levar a tarefa B para um segundo processador e mudar sua afinidade, enquanto A vai continuar na unidade original.$^[$

## Uso

Afinidade de processador pode reduzir efetivamente problemas de cache, mas não altera o problema persistente do balanceamento de carga.