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 de conjunto de trabalho e pelo menos um thread de execução. Cada processo é iniciado com um único fio, muitas vezes chamado de fio principal, mas pode criar fios adicionais a partir de qualquer um dos seus fios.
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 único de _thread_ e um conjunto de estruturas que o sistema usará para salvar o contexto do _thread_ até que ele seja agendado. O de contexto de thread inclui o conjunto de registradores de máquina do thread, a pilha do kernel, um bloco de ambiente de thread e uma pilha de usuário no espaço de endereço do processo do thread. As threads também podem ter o seu próprio contexto de segurança, que pode ser usado para impersonar clientes.
O Microsoft Windows suporta multitarefa preventiva, que cria o efeito de execução simultânea de várias linhas de execução de vários processos. Em um computador multiprocessador, o sistema pode executar simultaneamente tantos threads quantos forem os processadores no computador.
Um objeto de trabalho permite que grupos de processos sejam gerenciados como uma unidade. Os objetos de trabalho são objetos nomeáveis, protegíveis e compartilhá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 trabalho a identificadores de espera, enfileirar automaticamente com base em um temporizador e vincular com E/S.
de agendamento de 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 em modo de utilizador sem envolver o agendador do sistema e recuperar o controlo do processador se uma thread UMS bloquear no kernel. Cada thread UMS tem o seu próprio contexto em vez de compartilhar o contexto de uma única thread. A capacidade de alternar entre threads no modo de usuário torna o UMS mais eficiente do que 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 encadeamentos que as programam. Cada fio pode programar várias fibras. Em geral, as fibras não fornecem vantagens sobre uma aplicação multithreaded bem projetada. 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 os seguintes tópicos:
- Multitarefa
- Agendamento
- vários threads
- Processos Filhos
- Pools de threads
- Objetos de trabalho
- User-Mode Agendamento
- Fibras