多个用户如何在同一代码库上执行?

时间:2019-06-11 12:29:33

标签: asp.net iis web-applications concurrency webserver

发布ASP.NET Core Web应用程序并将文件夹添加到IIS中的应用程序时,许多用户可以访问该站点。

如果有1,000个用户同时登录,并且所有人都同时在应用程序中执行了相同的操作,比如说更新了他们的配置文件,那么服务器上正在发生什么?

是否所有用户都在同一代码上执行,还是复制源代码以防止并发问题?

如果我要通过在UpdateProfile方法中设置一个断点来远程调试应用程序,我会看到每个用户都通过串行访问还是会出现竞争状况?

根据经验,我有信心不会出现比赛状况,但是我不确定为什么……我想这与比赛有关系...

2 个答案:

答案 0 :(得分:0)

首先,要区分“已登录用户并执行相同操作”,这是他们在浏览器(客户端)中执行的用户体验(UX)以及服务器上发生的操作。真正发生的是,它们(通常而言)都是同时(或几乎同时)发送HttpRequest。因此,服务器(IIS等)要做的是(同时)发出1000个并行任务,并分别对每个任务使用HttpResponse进行响应。没有并发管理。如果说,它们都更新了一个计数器变量(在数据库中的表GeneralConstants中),您将遇到一些古怪的问题。如果要防止此类并发,请使用lock(...)语句或类似性质的东西。

如果您更新不同的内容(例如,您说过-每个用户都更新自己的个人资料),则不会进行并发操作(因为这些资源不同),但这与会话无关,而更多每个人都在做自己的事。

答案 1 :(得分:0)

  

是否所有用户都在同一代码上执行,还是复制源代码以防止并发问题?

他们将执行相同的代码,或者最好说他们执行相同的指令。

  

如果我要通过在UpdateProfile方法中设置一个断点来远程调试应用程序,我会看到每个用户都通过串行访问还是会出现竞争状况?

这取决于如何调用UpgradeProfile方法。这很可能是“竞争条件”,因为每个请求都将在其自己的线程上运行,并且每个线程将在其沿应用程序前进时到达并执行UpdateProfile方法。您的处理器执行线程(和进程)调度,因此它非常不确定。...除非您的应用程序以某种方式使其具有确定性。

您的问题中不清楚的是您担心哪种“比赛条件”?如果有1000个用户正在更新自己的个人资料,那么其他用户将如何受到影响?