Обрабатывает ли конвейер ASP.NET Core запросы многопоточностью? Если да, как настроить количество потоков? А также, должны ли одноэлементные службы быть потокобезопасными?
Многопоточность конвейера ASP.NET Core
- github.com/aspnet/benchmarks Посмотрите в разделе результатов, который отвечает на ваш первый вопрос 29.06.2016
- Собственно именно этот документ и заставляет меня задать этот вопрос! и из этого репозитория я могу видеть 29.06.2016
- Аналогично сценарию с обычным текстом, приведенному выше, но с включенной конвейерной обработкой HTTP на глубине 16. Включены только стеки / серверы, которые демонстрируют улучшение конвейерной обработки.. Я сомневаюсь, что он сможет обрабатывать 1,2 миллиона запросов в секунду в одном потоке сервера. 29.06.2016
- Мне тоже. В любом случае, здесь действительно важно то, как разработчик должен учитывать многопоточность сервера? 29.06.2016
- Попробуйте KestrelServerOptions.ThreadCount 30.06.2016
- Я понимаю! Спасибо. Что вы думаете о безопасности потоков одноэлементных служб? 30.06.2016
Ответы:
На первый вопрос уже был дан ответ в комментарии выше (см. KestrelServerOptions)
Что касается безопасности потоков, ответ находится в документация:
Одноэлементные службы времени жизни создаются при первом запросе (или при запуске ConfigureServices, если вы указываете там экземпляр), а затем каждый последующий запрос будет использовать тот же экземпляр. Если вашему приложению требуется одноэлементное поведение, рекомендуется разрешить контейнеру служб управлять временем существования службы вместо того, чтобы реализовывать шаблон проектирования одноэлементного объекта и самостоятельно управлять временем жизни вашего объекта в классе.
Это означает, что все запросы к службе извлекают один и тот же объект, что означает отсутствие объектов для каждого потока и, следовательно, безопасность потоков.
Безопасность потоков
Одноэлементные службы должны быть потокобезопасными. Если одноэлементная служба зависит от временной службы, временная служба может также нуждаться в потокобезопасности в зависимости от того, как она используется одноэлементной службой.
Не могу быть более ясным. Поскольку объекты создаются не для каждого потока, по умолчанию они не являются потокобезопасными (хотя, возможно, некоторые службы предназначены для этого).