Os encadeamentos no nível do kernel requerem uma alternância de contexto , que envolve a alteração de um grande conjunto de registradores do processador que definem o mapa de memória e as permissões atuais. Ele também despeja algum ou todo o cache do processador.
Os encadeamentos em nível de usuário exigem apenas uma pequena quantidade de contabilidade em um encadeamento ou processo do kernel.
No entanto, a diferença não é grande se os seus threads estão fazendo predominantemente operações de E / S, já que eles precisam passar pelo kernel em qualquer caso. É mais importante se você está tentando implementar algum tipo de simulação com um número muito grande de processos independentes. Nesse caso, você precisa prestar muita atenção a quais mecanismos de sincronização de thread você usa, já que alguns deles também vão até o kernel e acionam uma alternância de contexto.
link "Em geral, o custo indireto da troca de contexto varia de vários microssegundos para mais de mil microssegundos para nossa carga de trabalho. "
Editar: os encadeamentos em nível de usuário mantêm uma pilha por encadeamento e podem ou não salvar os registradores de uso geral, dependendo da arquitetura e das regras de bloqueio de sua convenção de chamada. Pode ser tão simples quanto descarregar os registradores para a pilha, saltar para um novo endereço e colocar alguns registradores, que podem estar em seu cache se esse segmento foi executado recentemente.
As alternâncias de contexto no nível do kernel também alteram o mapa de memória escrevendo para o TLB , e alterar o nível de segurança (nível de privilégio ou "toque") do processador. Veja "Considerações de desempenho"