При планировании задач задача заключается в том, чтобы смоделировать инициацию 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 следующим образом:
Справочная статья
Вход по гиперссылке виден.
Вход по гиперссылке виден.
|