Как несколько пользователей работают с одной и той же кодовой базой? - PullRequest
1 голос
/ 11 июня 2019

Когда вы публикуете веб-приложение ASP.NET Core и добавляете папки в приложение в IIS, многие пользователи могут получить доступ к сайту.

Если 1000 пользователей вошли в систему в одно и то же время и все сделали одно и то же в одно и то же время в приложении, скажем, обновили свой профиль, что происходит на сервере?

Все липользователи, выполняющие один и тот же код, или исходный код дублируется для предотвращения проблем параллелизма?

Если бы мне пришлось удаленно отлаживать свое приложение, установив точку останова в методе UpdateProfile, я бы увидел, что каждый пользователь проходит последовательно или будетусловия гонки?

Из опыта я уверен, что условий гонки не будет, но я не уверен, почему ... Я думаю, что сессия как-то связана с этим ...

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Все ли пользователи выполняют один и тот же код или дублирует исходный код для предотвращения проблем параллелизма?

Они будут выполнять один и тот же код, точнее сказать, они выполняют одинаковые инструкции.

Если бы я удаленно отлаживал свое приложение, помещая точку останова в метод UpdateProfile, видел бы я, чтобы каждый пользователь проходил последовательно или были бы условия гонки?

Это зависит от того, как вызывается метод UpgradeProfile. Скорее всего, это будет «условие гонки», при котором каждый запрос будет выполняться в своем собственном потоке, и каждый поток будет достигать и выполнять метод UpdateProfile по мере его продвижения по приложению. Ваш процессор выполняет планирование потоков (и процессов), и поэтому оно очень недетерминировано .... если только ваше приложение не делает его детерминированным.

Что не ясно из вашего вопроса, о каком "состоянии гонки" вы беспокоитесь? Если 1000 пользователей обновляют свой профиль, как это повлияет на других пользователей?

0 голосов
/ 11 июня 2019

Ну, во-первых, сделайте различие между «пользователи вошли в систему и сделали то же самое», то есть то, что они сделали в своем браузере (на стороне клиента), и что произошло на сервере.Что действительно происходит, так это то, что они (вообще говоря) отправляют одновременные (или почти одновременные) запросы HttpRequest.Итак, что сервер (IIS или тому подобное) выполняет 1000 параллельных задач (одновременно) и отвечает HttpResponse на каждую из них в отдельности.Там нет управления параллелизмом.Если, скажем, все они обновляют переменную-счетчик (например, в таблице GeneralConstants в БД), вы можете столкнуться с некоторыми причудливыми проблемами.Если вы хотите предотвратить такой параллелизм, используйте оператор блокировки (...) или что-то в этом роде.

Если вы обновляете разные вещи (скажем, как вы сказали - каждый пользователь обновляет свой профиль), тампараллелизма не происходит (потому что это разные ресурсы), но это не имеет ничего общего с сессией, и больше связано с тем, что каждый делает свое дело.

...