Qual é a vantagem de usar o pthreads no Linux?

1

Eu li em algum lugar que os encadeamentos do Linux são realmente implementados como processos no kernel, já que com o hardware de hoje e na plataforma Linux, o modelo de encadeamento é ineficiente comparado ao modelo de processo. Se este é o caso, então por que ainda usamos programação pthreads em nossos projetos (além de compatibilidade retroativa)? Por que há tanta hesitação em reprovar o modelo pthreads no Linux?

    
por Arpith 04.10.2012 / 13:55

1 resposta

3

A julgar pela pergunta que você faz, você provavelmente não viu problemas em Threads fornecer uma vantagem sobre o processos padrão.

Existem problemas como Negociação de Alta Frequência, por exemplo, quando o sistema se torna sensível ao número de interruptores de contexto no sistema, bem como a mudança do usuário para o modo kernel e vice-versa. Nesse caso, a capacidade de trabalhar dentro de um único espaço de memória e de ter interruptores de contexto leves ou nenhum comutador de contexto fornece aumentos de desempenho suficientes para se preocupar com isso. Além disso, se você tiver vários processos controlando o fluxo de dados, não será necessário implementar um dispatcher copiando dados para um processo disponível, pois será necessário criar filas na memória compartilhada ou usar o IPC baseado em rede para copiar dados de e para o vários espaços de memória de processos, enquanto que com threads você lê e analisa os dados uma vez e os mantém internamente onde qualquer thread pode acessar esse evento em particular, conforme necessário, tornando a execução muito mais rápida.

Além disso, há tarefas que podem manipular os mesmos dados em momentos diferentes ou ao mesmo tempo; nesse caso, fica muito mais fácil garantir que você não esteja atropelando as atualizações de um processo de atualização diferente (thread).

Dado estes e muitos mais problemas onde um único espaço de processo se torna vantajoso você pode ver a necessidade de threads. Agora, tanto quanto Pthreads estão em causa. Você não precisa usá-los, mas eles fornecem padronização e, portanto, portabilidade do código-fonte em todas as plataformas.

EDITAR

A pergunta original parece mencionar o LinuxThreads que estava implementando Threads inteiramente no nível de usuário e no nível do kernel tinha que ser tratado como processos porque essas eram as únicas entidades agendáveis do kernel disponíveis. A partir do kernel 2.6, este não é mais o caso . O NPTL implementa threads no nível do kernel como entidades agendáveis.

Você também pode ver a pergunta semelhante em StackOverflow

    
por 04.10.2012 / 16:24