Sobre Processos e Threads
Cada processo fornece os recursos necessários para executar um programa. Um processo tem um espaço de endereço virtual, código executável, identificadores abertos para objetos do sistema, um contexto de segurança, um identificador de processo exclusivo, variáveis de ambiente, uma classe de prioridade, tamanhos mínimos e máximos do conjunto de trabalho e pelo menos um thread de execução. Cada processo é iniciado com um único thread, geralmente chamado de thread primário, mas pode criar threads adicionais de qualquer um de seus threads.
Um thread é a entidade dentro de um processo que pode ser agendado para execução. Todos os threads de um processo compartilham seu espaço de endereço virtual e recursos do sistema. Além disso, cada thread mantém manipuladores de exceção, uma prioridade de agendamento, armazenamento local de thread, um identificador de thread exclusivo e um conjunto de estruturas que o sistema usará para salvar o contexto do thread até que ele seja agendado. O contexto do thread inclui o conjunto de registros de computador do thread, a pilha de kernel, um bloco de ambiente de thread e uma pilha de usuário no espaço de endereço do processo do thread. Os threads também podem ter seu próprio contexto de segurança, que pode ser usado para representar clientes.
O Microsoft Windows dá suporte a multitarefas preemptivas, o que cria o efeito da execução simultânea de vários threads de vários processos. Em um computador multiprocessador, o sistema pode executar simultaneamente quantos threads houver processadores no computador.
Um objeto de trabalho permite que grupos de processos sejam gerenciados como uma unidade. Objetos de trabalho são objetos navegáveis, protegíveis e fragmentáveis que controlam atributos dos processos associados a eles. As operações executadas no objeto de trabalho afetam todos os processos associados ao objeto de trabalho.
Um aplicativo pode usar o pool de threads para reduzir o número de threads de aplicativo e fornecer gerenciamento dos threads de trabalho. Os aplicativos podem enfileirar itens de trabalho, associar o trabalho a identificadores de espera, fazer fila automaticamente com base em um temporizador e associar-se a E/S.
O agendamento do modo de usuário (UMS) é um mecanismo leve que os aplicativos podem usar para agendar seus próprios threads. Um aplicativo pode alternar entre threads UMS no modo de usuário sem envolver o agendador do sistema e recuperar o controle do processador se um thread UMS bloquear no kernel. Cada thread UMS tem seu próprio contexto de thread em vez de compartilhar o contexto de thread de um único thread. A capacidade de alternar entre threads no modo de usuário torna o UMS mais eficiente do que os pools de threads para itens de trabalho de curta duração que exigem poucas chamadas do sistema.
Uma fibra é uma unidade de execução que deve ser agendada manualmente pelo aplicativo. As fibras são executadas no contexto dos threads que os agendam. Cada thread pode agendar várias fibras. Em geral, as fibras não fornecem vantagens sobre um aplicativo multithread bem projetado. No entanto, o uso de fibras pode facilitar a portabilidade de aplicativos que foram projetados para agendar seus próprios threads.
Para obter mais informações, consulte estes tópicos:
- Multitarefa
- Agendamento
- Vários threads
- Processos filho
- Pools de threads
- Objetos de trabalho
- Agendamento de modo de usuário
- Fibras