Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 16497|Resposta: 5

[Fonte] Concorrência multithread .NET/C# usando o pit do HttpWebRequest

[Copiar link]
Postado em 20-12-2021 15:21:04 | | | |
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.





Anterior:Xshell Xftp Para continuar usando este programa, você deve aplicar a versão mais recente...
Próximo:O comando Maven envia pacotes jar de terceiros para repositórios privados Nexus
Postado em 26-12-2021 17:20:57 |
Aprenda a aprender。。。。。
Postado em 2022-1-10 08:42:47 |
Aprenda a aprender。。。。。
Postado em 08-03-2022 15:58:54 |
Aprender...
 Senhorio| Postado em 2023-2-18 21:47:09 |
Além disso, a solução

 Senhorio| Postado em 2023-3-10 21:21:15 |
Configure via web.config

Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com