Considerações sobre multitarefa

A diretriz recomendada é usar o menor número possível de threads, minimizando assim o uso de recursos do sistema. Isso melhora o desempenho. A multitarefa tem requisitos de recursos e possíveis conflitos a serem considerados ao projetar seu aplicativo. Os requisitos de recurso são os seguintes:

  • O sistema consome memória para as informações de contexto exigidas por processos e threads. Portanto, o número de processos e threads que podem ser criados é limitado pela memória disponível.
  • Manter o controle de um grande número de threads consome muito tempo do processador. Se houver muitos threads, a maioria deles não poderá fazer progressos significativos. Se a maioria dos threads atuais estiver em um processo, os threads em outros processos serão agendados com menos frequência.

Fornecer acesso compartilhado a recursos pode criar conflitos. Para evitá-los, você deve sincronizar o acesso aos recursos compartilhados. Isso é verdadeiro para recursos do sistema (como portas de comunicação), recursos compartilhados por vários processos (como identificadores de arquivo) ou os recursos de um único processo (como variáveis globais) acessados por vários threads. A falha ao sincronizar o acesso corretamente (no mesmo processo ou em processos diferentes) pode levar a problemas como deadlock e condições de corrida. Os objetos e as funções de sincronização que você pode usar para coordenar o compartilhamento de recursos entre vários threads. Para obter mais informações sobre sincronização, consulte Sincronizando a execução de vários threads. Reduzir o número de threads torna mais fácil e eficaz sincronizar recursos.

Um bom design para um aplicativo multithread é o servidor de pipeline. Nesse design, você cria um thread por processador e cria filas de solicitações para as quais o aplicativo mantém as informações de contexto. Um thread processaria todas as solicitações em uma fila antes de processar solicitações na próxima fila.