|
Я занимаюсь планированием задач, чтобы имитировать инициирование HTTP-запроса, и обнаружил, что когда задач становится больше, планирование задач, похоже, умирает псевдосмертью.
Максимальное количество запрашиваемых соединений в обычной системе Windows равно 2, а в серверной операционной системе - 10. Если этот лимит одновременных соединений не изменен, то количество одновременных http-соединений, которые может сделать клиент, составляет всего 2 или 10.
System.Net.ServicePointManager.DefaultConnectionLimit Это позволяет получить текущее максимальное количество соединений, установленное по умолчанию, как показано ниже:
Есть ли у HttpClient ограничение параллелизма по умолчанию?
До .Net 4.0 он полагался на HttpWebRequest для Http-операций. По умолчанию он устанавливает очень консервативный максимальный лимит в 2 параллелизма на одном сайте, в результате чего при использовании HttpWebRequest по умолчанию часто не удается добиться желаемой скорости (по оценкам, эта стратегия угнетает многих кодеров), необходимо изменить в App.config или ServicePointManager. значение.
MS в .Net 4.5 ввела класс HttpClient специально для работы с Http-операциями, и первоначально я думал, что HttpClient и HttpWebRequest следуют одной и той же стратегии. Сегодня, когда я писал многопоточное приложение для загрузки, я использовал 10 одновременных соединений и обнаружил, что по умолчанию HttpClient не имеет ограничения параллельности.
Net 4.5 отменил это ограничение (в конце концов, теперь в основном никто не следует этому стандарту), а затем переписал соответствующий код с WebRequest, обнаружил, что он по-прежнему имеет 2 одновременных ограничения, а значение ServicePointManager.DefaultConnectionLimit также равно 2. То есть: HttpClient не контролируется политикой параллелизма HttpWebRequest и не существует ограничения параллелизма на системном уровне.
Кроме того, в ходе тестирования было обнаружено, что в HttpWebRequest по умолчанию не для всех адресов установлено ограничение параллелизма 2. Например, для локальных соединений с http-адресами (http://localhost/*) нет ограничения по количеству обращений.
Многопоточная среда C# для вызова HttpWebRequest с ограничением на количество одновременных соединений
HttpWebRequest или WebClient от net имеет ограничение на количество одновременных соединений в многопоточной среде, которое по умолчанию равно 2 для настольных операционных систем, таких как windows xp и windows 7, и 10 для серверных операционных систем. Если вы не измените это ограничение, то количество одновременных соединений, которые может выполнить клиент, составит всего 2 или 10. Если не изменять это ограничение, то количество http-соединений, которые клиент может установить одновременно, составит всего 2 или 10. Для таких приложений, как браузеры или веб-пауки, 2 или 10 одновременных соединений - это слишком мало, и они сильно влияют на производительность приложения. Причина такого ограничения на количество одновременных соединений заключается в том, что стандарты http 1.0 и http 1.1 определяют максимальное количество одновременных соединений в 2. Однако основные браузеры больше не следуют этому правилу, но .net framework все еще придерживается этого правила по умолчанию.
Во многих статьях говорится, что асинхронный доступ к HttpWebRequest может улучшить производительность параллелизма, но по моим тестам, если не менять установленное по умолчанию количество одновременных соединений, то и синхронный, и асинхронный доступ работают плохо.
Мы также можем установить максимальное количество одновременных соединений в app.config следующим образом:
Обратитесь к статье
h ttps:// blog.csdn.net/defender_/article/details/91949613 h ttps:// www.cnblogs.com/quanying/p/4629827.html
|
Предыдущая статьяXshell Xftp Чтобы продолжить использование этого приложения, вы должны применить последнюю версию...Next:Команда Maven для отправки сторонних jar-пакетов в частный репозиторий Nexus
|