Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 16497|Ответ: 5

[Источник] .NET/C# многопоточная параллельность с использованием ямы HttpWebRequest

[Скопировать ссылку]
Опубликовано 2021-12-20 15:21:04 | | | |
При планировании задач задача заключается в том, чтобы смоделировать инициацию HTTP-запроса и обнаружить, что когда задач больше, планирование задач выглядит как ложная смерть.

Максимальное количество запрошенных соединений по умолчанию на обычной Windows — 2, а на серверной операционной системе — 10. Если вы не измените это ограничение на параллельное соединение,Тогда количество http-соединений, которые клиент может совершать одновременно, составляет всего 2 или 10

System.Net.ServicePointManager.DefaultConnectionLimit Это максимальное количество соединений, которые могут получить текущую настройки по умолчанию, как показано на рисунке ниже:



Существует ли стандартный лимит по параллелизму для HttpClient?

До .Net 4.0 HttpWebRequest использовал HTTP-операции. По умолчанию для одного и того же сайта очень консервативно ограничено 2 лимита на параллельность, из-за чего HttpWebRequests по умолчанию не достигают идеальной скорости (видимо, такая стратегия раздражает многих программистов), и значение App.config или ServicePointManager.DefaultConnectionLimit необходимо изменить.

Microsoft ввела класс HttpClient в .Net 4.5 для обработки HTTP-операций, и я думал, что HttpClient и HttpWebRequest следуют одной и той же политике. Сегодня, когда я писал многопоточную программу для загрузки, я использовал 10 одновременных соединений и обнаружил, что в HttpClient по умолчанию нет ограничения по одновременному номеру.

Сначала я думал, что да. Net 4.5 убрала это ограничение на параллелизм (в конце концов, практически никто сейчас не придерживается этого стандарта), а затем переписала соответствующий код с помощью WebRequest и обнаружила, что это всё ещё ограничение на 2 параллельности, а значение ServicePointManager.DefaultConnectionLimit тоже равно 2. То есть HttpClient не контролируется политикой параллелизма HttpWebRequest, и на уровне системы нет ограничения на конкурентность.

Кроме того, во время тестирования я обнаружил, что HttpWebRequest по умолчанию не ограничивается максимум 2 параллелизмом для всех адресов. НапримерДля локальных HTTP-адресных соединений (http://localhost/*) нет ограничения на параллельность.

C# вызовы многопоточной среды к ограничению параллельного соединения HttpWebRequest

В .net HttpWebRequest или WebClient есть ограничение по параллельному соединению в случае многопоточности: по умолчанию 2 на настольных операционных системах, таких как Windows XP и Windows 7, и 10 по умолчанию на серверных ОС. Если не изменить это ограничение на одновременное соединение, количество HTTP-соединений, которое клиент может совершить одновременно, составит всего 2 или 10. Для некоторых приложений, таких как браузеры или пауки, количество 2 или 10 параллелей слишком мало и сильно влияет на производительность приложения. Это ограничение на одновременное соединение связано со стандартами HTTP 1.0 и HTTP 1.1, которые предусматривают максимум 2 одновременных соединения. Однако популярные браузеры больше не следуют этому правилу, а .NET-фреймворк по умолчанию по-прежнему следует этому правилу.

Во многих статьях говорится, что асинхронный доступ к HttpWebRequest может улучшить производительность одновременного, но я проверял, что если не изменить стандартное количество одновременных соединений, производительность синхронного или асинхронного доступа будет плохой.

Мы также можем установить максимальное количество параллельных соединений в app.config следующим образом:

Справочная статья

Вход по гиперссылке виден.
Вход по гиперссылке виден.





Предыдущий:Xshell Xftp Чтобы продолжать использовать эту программу, необходимо применить последнюю версию...
Следующий:Команда Maven отправляет jar-пакеты сторонних пользователей в приватные репозитории Nexus
Опубликовано 26.12.2021 17:20:57 |
Учитесь учиться。。。。。
Опубликовано 2022-1-10 08:42:47 |
Учитесь учиться。。。。。
Опубликовано 2022-3-8 15:58:54 |
Учиться...
 Хозяин| Опубликовано 2023-2-18 21:47:09 |
Кроме того, решение

 Хозяин| Опубликовано 2023-3-10 21:21:15 |
Настройка через web.config

Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com