【问题标题】:How can a program serve several users at the same time?一个程序如何同时为多个用户提供服务?
【发布时间】:2018-08-24 08:50:54
【问题描述】:

如果我们考虑为一个用户提供服务的桌面应用程序,这可能很直观。但是,例如在 Web 应用程序中,我们编写了一个从数据库中获取某些内容并将其显示给用户浏览器的程序,当两个用户或 100 多个用户同时请求相同的程序、相同的数据时会发生什么?

如何以及通过什么来处理它,它“看起来”如何,幕后发生了什么使这成为可能?以我所知甚少,我想象程序每次被调用时都会运行一次,用户必须依次等待?多线程的概念是从哪里来的,或者在这里无关紧要? (编辑:我现在知道这称为并行计算,而不是并发或顺序)

感谢您的宝贵时间。 (顺便说一句,我不确定如何标记这个问题,任何建议将不胜感激!)

【问题讨论】:

  • 这被称为“数据库并发”——我建议你研究一下。无论是桌面还是网页,真正的功能都是由数据库提供的。

标签: performance concurrency parallel-processing sequential


【解决方案1】:

在大多数 Web 框架中,这是通过让请求不共享任何数据来实现的。该框架会注意为每个请求分别实例化所有必要的对象。

从概念上讲,应用程序只是一个接收请求数据并输出响应数据的函数。因此,如果您的应用程序是一个简单的欢迎程序应用程序,那么函数如下所示:

string GetResponse(string request) => "Hello " + request;

您可以在这里直观地看到,多个并发用户访问此功能将是非常安全的,因为用户不会共享任何状态。

通常不会有任何全局变量,因为它们是共享的。如果有全局变量,则必须非常小心以确保其安全。

编写数据库以便多个并发请求可以安全地交互。

【讨论】:

  • 如果打开一个桌面应用程序的多个实例会不会一样?它们可以同时运行吗?你知道有什么书可以了解更多细节吗?
  • 是的,那将是相似的。一个区别是,由于使用多个进程,默认情况下进程是相当隔离的。在服务器上,您必须按照代码中的约定进行隔离。我不能推荐书。相反,只需获取一些 Web 框架并尝试一下。您可以通过添加全局变量来故意破坏它。 C# 非常容易上手。这是一个有趣的语言和平台。 Visual Studio 也有免费版本。
猜你喜欢
  • 2019-12-19
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2019-01-13
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多