Partilhar via


Quando usar multitarefa

Há duas maneiras de implementar multitarefa: como um único processo com vários threads ou como vários processos, cada um com um ou mais threads. Uma aplicação pode colocar cada tarefa que requer um espaço de endereçamento privado e recursos privados no seu próprio processo, para protegê-la das atividades de outras tarefas de processos.

Um processo multithreaded pode gerenciar tarefas mutuamente exclusivas com threads, como fornecer uma interface de usuário e executar cálculos em segundo plano. Criar um processo multithreaded também pode ser uma maneira conveniente de estruturar um programa que executa várias tarefas semelhantes ou idênticas simultaneamente. Por exemplo, um servidor de canal nomeado pode criar uma thread para cada processo do cliente que se liga ao canal. Esse thread gerencia a comunicação entre o servidor e o cliente. Seu processo pode usar vários threads para realizar as seguintes tarefas:

  • Gerencie a entrada para várias janelas.
  • Gerencie a entrada de vários dispositivos de comunicação.
  • Distinguir tarefas de prioridade variável. Por exemplo, um thread de alta prioridade gerencia tarefas críticas de tempo e um thread de baixa prioridade executa outras tarefas.
  • Permita que a interface do usuário permaneça responsiva, enquanto aloca tempo para tarefas em segundo plano.

Normalmente, é mais eficiente para um aplicativo implementar multitarefa criando um processo único e multithreaded, em vez de criar vários processos, pelos seguintes motivos:

  • O sistema pode executar uma mudança de contexto mais rapidamente para threads do que processos, porque um processo tem mais sobrecarga do que um thread (o contexto do processo é maior do que o contexto do thread).
  • Todos os threads de um processo compartilham o mesmo espaço de endereçamento e podem acessar as variáveis globais do processo, o que pode simplificar a comunicação entre threads.
  • Todos os threads de um processo podem compartilhar identificadores abertos para recursos, como arquivos e pipes.

Existem outras técnicas que você pode usar no lugar do multithreading. Os mais significativos são os seguintes: entrada e saída assíncronas (E/S), portas de conclusão de E/S, chamadas de procedimento assíncronas (APC) e a capacidade de aguardar vários eventos.

Um único thread pode iniciar várias solicitações de E/S demoradas que podem ser executadas simultaneamente usando E/S assíncronas. A E/S assíncrona pode ser executada em arquivos, tubos e dispositivos de comunicação serial. Para obter mais informações, consulte Sincronização eEntrada e Saída Sobrepostas.

Um único thread pode bloquear sua própria execução enquanto aguarda que qualquer um ou todos os vários eventos ocorram. Isso é mais eficiente do que usar vários threads, cada um aguardando um único evento, e mais eficiente do que usar um único thread que consome tempo do processador verificando continuamente a ocorrência de eventos. Para obter mais informações, consulte Funções de espera.