Повышение производительности в ASP.NET Core 7
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.11.22 11:47
Оценка: 11 (2) -1
Повышение производительности в ASP.NET Core 7

Выбрасывание исключений может быть дорогостоящим, и dotnet / aspnetcore #38094 определил область в транспорте сокетов Kestrel, где мы могли бы избежать создания исключения на одном уровне во время закрытия соединения. Отказ от создания исключений привел к снижению загрузки процессора в наших тестах connection close. от 50% до 40% процессора в Linux, от 15% до 14% процессора в Windows и от 24% до 18% процессора в 28-ядерном ARM Linux! Другим приятным побочным эффектом изменения является то, что количество исключений в секунду, как показано на графике ниже, резко сократилось, что всегда приятно видеть.



В версии 7.0 все выделения конечного автомата были исключены из операций чтения подключений к WebSocket.
Пожалуйста, обратите внимание, что PoolingAsyncValueTaskMethodBuilder это не просто бесплатная производительность, которая должна применяться ко всем асинхронным API. Хотя это может выглядеть хорошо с точки зрения распределения и может улучшить микробенчмарки, в реальных приложениях оно может работать хуже. Тщательно измерьте объединение ресурсов, прежде чем приступить к его использованию, поэтому мы применили эту функцию только к определенным API.


По HTTP/2 нескольких потоков через одно соединение. Когда поток выполняет запись в соединение, он должен принимать блокировку, которая может блокировать другие параллельные потоки. Мы экспериментировали с несколькими различными подходами для улучшения параллелизма. Мы нашли потенциальное улучшение, поставив записи в очередь в Channel и позволив одной задаче-потребителю обрабатывать очередь и выполнять всю запись, что устраняет большую часть конфликтов блокировок.

и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.