bnk>>>Я не понимаю как создание 4000 потоков на процессоре который поддерживает 16 (для примера), может в принципе что-то ускорить?
Gt_>>Что ты слышал про зеленые потоки?
bnk>Ничего практически (в контексте .net по крайней мере). bnk>То есть, вообще я термин такой слышал, но что он означает я не совсем в курсе. bnk>Насколько я понял это типа эмуляция потоков? Типа недоделанный async/await, или?
это async/await недоделанный зеленый поток, а зеленый поток это полностью автоматизированный async/await без засирания языка не нужными конструкциями. так вот, с зелеными потоками простенький сервак с рест сервисом способен чуть ли не миллион запросов в секунду держать, что на несколько больше процессорных threads.
вся фишка в том, что пока одни потоки ждут и/о другие могут утилизировать cpu.
Здравствуйте, Codealot, Вы писали:
C>Получается около 40-50 запросов в секунду. И хотя я не ожидал миллионов, но это — вообще курам на смех. C>Я что-то упускаю?
Да, упускаешь. Этот код показывает не быстродействие HttpClient, а сколько можно запросов выполнить в синхронном режиме с настроенной параллелизацией. HttpClient может легко держать тысячи реквестов в секунду
Здравствуйте, Codealot, Вы писали:
C>Странно, но это как-то связано с компьютером. Запускаю на одном, и получаю жалкие крохи. Запускаю на другом, и влегкую 3-4 тысячи.
firewall? Антивирус?
C>Странно, но это как-то связано с компьютером. Запускаю на одном, и получаю жалкие крохи. Запускаю на другом, и влегкую 3-4 тысячи.
Это связано с тем, что
using var response = await httpClient.GetAsync(url, token);
делает следующее:
1. (в первый раз) устанавливает сооединение (DNS, etc.)
2. [HttpClient] Посылает сообщение
3. Сообщение пересылается по сети
4. Сервер обрабатывает сообщение
5. Ответ пересылается по сети
6. [HttpClient] Ответ обрабытывается HttpClient
Здесь HttpClient почти ничего не делает по сравнению с другими пунктами
Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, vmpire, Вы писали:
V>>firewall? Антивирус?
C>Одинаково — Defender. Разница в том, что где тормозит — винда 11, а где нет — 10. Но это вряд ли объясняет проблему.
Маршрут везде одинаковый? пинги?
Здравствуйте, Codealot, Вы писали:
V>>firewall? Антивирус?
C>Одинаково — Defender. Разница в том, что где тормозит — винда 11, а где нет — 10. Но это вряд ли объясняет проблему.
Можно на сервере посмотреть очередь запросов. Скорее всего ServicePointManager.DefaultConnectionLimit не работает
ServicePointManager.DefaultConnectionLimit = 4;
или
Uri uri = new Uri("http://www.contoso.com/");
ServicePoint sp = ServicePointManager.FindServicePoint(uri);
sp.ConnectionLimit = newLimit;
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Codealot, Вы писали:
S>> Так ServicePointManager это про клиента
C>Не, на клиенте уже пробовал. Однофигственно.
Интересно, а что выдает
var url = "https://localhost:7065/weatherforecast";
Uri uri = new Uri(url);
ServicePoint sp = ServicePointManager.FindServicePoint(uri);
sp.ConnectionLimit??
Там явно проблема с количеством соединений с сервером
и солнце б утром не вставало, когда бы не было меня
Поковырявишсь выяснил, что скорость радикально меняется в зависимости от того, запускается прога под отладчиком или без. И без него, скорость на "медленном" компе уже намного лучше.
Но хотел бы я знать, почему это так сильно влияет на один комп, но не на другой.