При плануванні завдань завдання полягає в тому, щоб імітувати ініціацію HTTP-запиту, і коли завдань більше, планування здається як фальшива смерть.
Максимальна кількість запитуваних з'єднань за замовчуванням на звичайній Windows — 2, а на серверній операційній системі — 10. Якщо ви не зміните це обмеження на паралельне з'єднання,Тоді кількість http-з'єднань, які клієнт може здійснити одночасно, становить лише 2 або 10。
System.Net.ServicePointManager.DefaultConnectionLimit Це максимальна кількість з'єднань, які можуть отримати поточне налаштування за замовчуванням, як показано на рисунку нижче:
Чи існує стандартний ліміт на конкурентність для HttpClient?
До виходу .Net 4.0 Http-операції використовувалися HttpWebRequest. За замовчуванням існує дуже консервативний максимум 2 обмеження на паралелізм для одного й того ж сайту, через що HttpWebRequests за замовчуванням не досягають ідеальної швидкості (гадаю, ця стратегія дратує багатьох програмістів), і значення App.config або ServicePointManager.DefaultConnectionLimit потрібно змінювати.
MS запровадила клас 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
HttpWebRequest або WebClient у .net має обмеження паралельного з'єднання у випадку багатопотокності, яке за замовчуванням становить 2 на настільних операційних системах, таких як Windows XP і Windows 7, і 10 за замовчуванням на серверних операційних системах. Якщо не змінити це обмеження на паралельне з'єднання, кількість HTTP-з'єднань, які клієнт може здійснити одночасно, становить лише 2 або 10. Для деяких застосувань, таких як браузери чи павуки, кількість 2 або 10 паралелістів є надто малою і суттєво впливає на продуктивність застосунку. Це обмеження одночасного з'єднання зумовлене стандартами HTTP 1.0 та HTTP 1.1, які визначають максимум 2 одночасні з'єднання. Однак масові браузери більше не дотримуються цього правила, але .NET-фреймворк за замовчуванням дотримується його.
Багато статей стверджують, що асинхронний доступ до HttpWebRequest може покращити паралельну роботу, але я перевіряв, що якщо не змінювати стандартну кількість паралельних з'єднань, продуктивність синхронного або асинхронного доступу є поганою.
Ми також можемо встановити максимальну кількість паралельних з'єднань у app.config наступним чином:
Довідкова стаття
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.
|