Ao fazer escalonamento de tarefas, a tarefa de agendamento é simular a iniciação de uma requisição HTTP e perceber que, quando há mais tarefas, o escalonamento parece ser como uma morte falsa.
O número máximo padrão de conexões solicitadas em um sistema Windows normal é 2, e em um sistema operacional servidor, o padrão é 10. Se você não modificar esse limite de conexão concorrente,Então, o número de conexões http que o cliente pode fazer ao mesmo tempo é apenas 2 ou 10。
System.Net.ServicePointManager.DefaultConnectionLimit Este é o número máximo de conexões que podem obter a configuração padrão atual, como mostrado na figura abaixo:
Existe um limite padrão de concorrência para o HttpClient?
Antes do .Net 4.0, as operações Http eram usadas pelo HttpWebRequest. Ele tem um limite máximo muito conservador de 2 concorrências para o mesmo site por padrão, o que frequentemente faz com que as HttpWebRequests não obtenham a velocidade ideal por padrão (acho que essa estratégia frustra muitos programadores), e o valor do App.config ou ServicePointManager.DefaultConnectionLimit precisa ser modificado.
A Microsoft introduziu uma classe HttpClient no .Net 4.5 para lidar com operações Http, e eu achava que HttpClient e HttpWebRequest seguiam a mesma política. Hoje, ao escrever um programa de download multithread, usei 10 conexões concorrentes e descobri que o HttpClient não tem um limite de número concorrente por padrão.
No começo achei que sim. O Net 4.5 removeu esse limite de concorrência (afinal, basicamente ninguém segue esse padrão agora), e então reescreveu o código relevante com o WebRequest, descobrindo que ainda era limite de 2 concorrências, e o valor do ServicePointManager.DefaultConnectionLimit também era 2. Ou seja, o HttpClient não é controlado pela política de concorrência do HttpWebRequest, e não há limite de concorrência em nível de sistema.
Além disso, durante os testes, percebi que o HttpWebRequest não permite um máximo de 2 concorrências para todos os endereços. Por exemploNão há limite de concorrência para conexões de endereço HTTP local (http://localhost/*).。
chamadas de ambiente multithreaded C# para limite de conexão concorrente HttpWebRequest
O HttpWebRequest ou WebClient do .net tem um limite de conexão concorrente no caso de multithreading, que é 2 por padrão em sistemas operacionais desktop como Windows XP e Windows 7, e 10 por padrão em sistemas operacionais de servidor. Se você não alterar esse limite de conexão concorrente, o número de conexões HTTP que um cliente pode fazer ao mesmo tempo é apenas 2 ou 10. Para algumas aplicações, como navegadores ou aranhas, o número de concorrência de 2 ou 10 é muito pequeno e afeta muito o desempenho do aplicativo. Esse limite de conexão concorrente se deve aos padrões HTTP 1.0 e HTTP 1.1, que especificam no máximo 2 conexões concorrentes. No entanto, navegadores convencionais não seguem mais essa regra, mas o .NET framework ainda a segue por padrão.
Muitos artigos dizem que acessar o HttpWebRequest de forma assíncrona pode melhorar o desempenho concorrente, mas testei que, se você não mudar o número padrão de conexões concorrentes, o desempenho de acesso síncrono ou assíncrono não é bom.
Também podemos definir o número máximo de conexões concorrentes no app.config da seguinte forma:
Artigo de referência
O login do hiperlink está visível.
O login do hiperlink está visível.
|