Benefícios de threads
Programas multiencadeados podem melhorar o desempenho em comparação com os programas paralelos tradicionais que utilizam vários processos. Além disso, o desempenho melhorado pode ser obtido em sistemas multiprocessador usando threads.
Gerenciando threads
Gerenciar threads; ou seja, criar threads e controlar sua execução, requer menos recursos do sistema do que o gerenciamento de processos. A criação de um encadeamento, por exemplo, só requer a alocação da área de dados privados da thread, geralmente 64 KB, e duas chamadas de sistema. A criação de um processo é bem mais cara, pois todo o espaço de endereçamento do processo pai é duplicado.
A API de bibliotecas de threads também é mais fácil de usar do que a biblioteca para gerenciamento de processos. A criação de thread requer apenas a subroutine pthread_create .
Comunicações Inter-thread
A comunicação Inter-thread é bem mais eficiente e mais fácil de usar do que a comunicação entre processos. Como todas as threads dentro de um processo compartilham o mesmo espaço de endereço, elas precisam não usar memória compartilhada. Proteja dados compartilhados do acesso simultâneo, utilizando mutexes ou outras ferramentas de sincronização.
As instalações de sincronização fornecidas pela biblioteca threads facilitada a implementação de ferramentas de sincronização flexíveis e poderosas. Essas ferramentas podem substituir as tradicionais instalações de comunicação do inter-processo, como filas de mensagens. Os tubos podem ser usados como um caminho de comunicação inter-thread.
Sistemas multiprocessadores
Em um sistema multiprocessador, várias threads podem ser executadas simultaneamente em múltiplas CPUs. Por isso, programas multithreaded podem ser executados muito mais rápido do que em um sistema uniprocessador. Eles também podem ser mais rápidos do que um programa usando vários processos, porque os threads requerem menos recursos e geram menos sobrecargamento. Por exemplo, trocar threads no mesmo processo pode ser mais rápido, especialmente no modelo de biblioteca M: N em que os switches de contexto muitas vezes podem ser evitados. Por fim, uma grande vantagem de usar threads é que um único programa multithreaded funcionará em um sistema uniprocessador, mas pode naturalmente tirar proveito de um sistema multiprocessador, sem recompilação.
Limitações
A programação multiencadeada é útil para implementar algoritmos paralelizados usando várias entidades independentes. No entanto, há alguns casos em que vários processos devem ser usados em vez de múltiplas threads.
Muitos identificadores de sistema operacional, recursos, estados ou limitações são definidos no nível do processo e, assim, são compartilhados por todas as threads em um processo. Por exemplo, IDs de usuário e de grupo e suas permissões associadas são tratados em nível de processo. Programas que precisam atribuir IDs de usuário diferentes às suas entidades de programação precisam usar vários processos, em vez de um único processo multiencadeado. Outros exemplos incluem atributos de sistema de arquivos, como o diretório de trabalho atual, e o estado e número máximo de arquivos abertos. Programas multithreaded podem não ser apropriados se esses atributos forem mais bem tratados de forma independente. Por exemplo, um programa multi-processado pode deixar que cada processo abra um grande número de arquivos sem interferência de outros processos.