Tento dizê-los com outras palavras.
Em um servidor, você pode ter muitos sites asp.net que funcionam juntos. Cada site é um domínio de aplicativo .
Você deve atribuir a cada um deles um pool de aplicativos . Muitos domínios de aplicativos (sites) podem ter o mesmo pool de aplicativos e, como têm o mesmo pool, são executados nos mesmos processos e na mesma conta - e têm as mesmas configurações do pool. Se este pool for reiniciado, todos os sites sob esse pool serão reiniciados.
Agora, cada pool pode ter um ou mais processos de trabalho . Cada processo de trabalho é um programa diferente que executa seu site, tem suas próprias variáveis estáticas, eles iniciam chamadas de parada diferentes, etc. Processos de trabalho diferentes não se comunicam juntos, e a única maneira de trocar dados é de arquivos comuns ou de um banco de dados comum. Se você tem mais de um processo de trabalho e um deles faz cálculos demorados, o outro pode cuidar das chamadas pela internet e mostrar o conteúdo.
Quando você atribui muitos processos de trabalho a um único pool, então você cria o web garden chamado e seu site pode ser executado em mais de um computador se um computador for uma máquina de processamento.
Cada processo de trabalho pode ter muitos threads.
Como o processo de trabalho mais afeta você:
Quando você tem um processo de trabalho, tudo é mais simples, em seu aplicativo todas as variáveis estáticas são as mesmas e você usa o lock
para sincronizá-las.
Quando você atribui mais de um processo de trabalho , você ainda continua a usar o lock
para variáveis estáticas, as variáveis estáticas não são diferentes entre as muitas execuções do seu site e se você tiver algum recurso comum (por exemplo, a criação de uma miniatura no disco) então você precisa sincronizar seu processo de trabalho com Mutex
.
Mais uma nota. Parece que quando você cria mais processos de trabalho , pode ter carregamentos de página assíncronos mais suaves. Há um pequeno problema com o manipulador de sessão do asp.net que é bloquear todo o processo para o carregamento de uma página - isso é bom e não é bom dependendo se você conhece e trata disso - ou altere-o.
Então, vamos falar sobre um site apenas com muitos processos de trabalho. Aqui você enfrenta o problema com o qual precisa sincronizar sua mudança de recurso comum Mutex
. Mas as páginas / manipuladores que usam a sessão não são assíncronos porque a sessão os bloqueia. Isso é bom para começar porque você evita fazer essa sincronização de muitos pontos você mesmo.
Algumas perguntas sobre este tópico:
Aplicativo da Web bloqueado durante o processamento de outro aplicativo da Web no compartilhamento da mesma sessão. As
chamadas jQuery Ajax para serviço da Web parecem ser síncronas.
Servidor ASP.NET não processa páginas de forma assíncrona
Substituindo inteiramente a sessão do ASP.Net
Agora, este bloqueio de sessão não afeta sites diferentes.
Entre diferentes sites, o processo mais trabalhado pode ajudar a não um site bloquear o outro com processo de longa execução.
Também entre sites diferentes, mais pools também podem ajudar, porque cada pool tem pelo menos um processo trabalhado, mas lembre-se e veja por você mesmo usando o explorador de processos, cada processo de trabalho ocupa mais memória do seu computador e um grande servidor com 16G de memória e um servidor SQL não pode ter muitos processos de trabalho diferentes - por exemplo, em um servidor com 100 sites compartilhados, você não pode ter 100 pools diferentes.