【问题标题】:concurrency issues in web applicationsWeb 应用程序中的并发问题
【发布时间】:2012-07-14 22:22:36
【问题描述】:

在我开始进行网络编程之前,我认为这很容易。现在,经过一年的经验,我认为这真的很难,主要是因为并发问题。

因为这是一个非常出乎意料的发现,所以我试图询问我更有经验的朋友(他们制作了一些应用程序,如电子商店等)。具体来说,我问他们是否真的有需要解决的并发问题,否则您有数据变得不一致的危险,他们就像:“嗯,从没想过”。这让我有点害怕自己的理智,甚至一些令人筋疲力尽的网络搜索也没有令人信服地回答这个问题。

因此,我要确保我的思路不会导致一个非常白的房间:

1)假设LAMP框架,apache运行的两个php脚本是否有可能以任何可能的方式重叠执行?

2) 同一个脚本是否可以同时运行多次,并且其实例以任何可能的方式重叠?

3) LAMP 的选择是否重要,或者与今天使用的任何 Web 开发环境一样吗?

4) 如果并发真的是一个问题,而且我不是在编造,有没有什么理论可以帮助我解决这个问题并像这样解决这些问题:“嘿,看,有一个可能的并发问题”,过了一会儿:“嘿,这是X的一个经典例子,可以这样解决”。

5) 为什么程序员倾向于将 Web 开发视为不“洁净”,同时认为他们可以轻松做到这一点? (无需回答这个问题,但这个事实让我很生气,虽然我知道它曾经和我一样)

我知道,从 stackoverflow 的角度来看,这可能是一个非常普遍的问题,但我周围没有人真正有经验可以提供帮助。

【问题讨论】:

  • 到目前为止,这一切听起来像是你通常害怕并发。发生了什么让你害怕了?
  • 这里没有 PHP 专家,但我猜 Apache 同时运行相同的 PHP 脚本,以防两个客户端的请求重叠。同步可以通过多种方式完成,例如,在文件系统级别或数据库级别。 Google 用于“乐观锁定”和“悲观锁定”。
  • @jdi 只是我在大学里所做的只是普通的顺序程序,我只听说过锁定、事务等,所以我现在需要学习很多东西才能成为一名优秀的开发人员(除了还有这整个安全的东西......还有很长的路要走:])
  • @VictorSorokin 谢谢你,我会查的。

标签: concurrency lamp


【解决方案1】:

我真的认为保护共享资源的原则在网络应用程序和标准桌面程序之间并没有太大的不同。资源就是资源,除非您特别阻止多个实例,否则应用程序可以多次运行。

1) 假设 LAMP 框架,是否可以运行两个 php 脚本 apache 以任何可能的方式在执行中重叠?

是的。 Apache 可以在线程/进程中运行请求。两个 PHP 脚本请求可以同时运行。

2) 同一个脚本是否可以在 同时它的实例以任何可能的方式重叠?

是的。 Apache 可以在线程/进程中运行请求。两个 PHP 脚本请求可以同时运行。

3) LAMP 的选择很重要,还是同样适用 目前使用的任何 Web 开发环境?

Apache 具有在多个线程中运行请求的方法。还有其他使用异步方法的服务器。无论哪种方式,您都不应该依赖 Web 服务器来防范代码中的并发操作。这是您的代码检查资源的责任。

4) 如果并发真的是个问题而且我不只是在做 事情发生了,有什么理论可以帮助我解决问题 围绕它并像这样解决这些问题:“嘿,看,有一个 可能的并发问题”,过了一会儿:“嘿,这是一个经典 X的例子,可以这样解决”。

这实际上取决于您的代码资源以及您所共享的内容。例如,如果脚本需要与文件系统一起使用,那么您的代码应该通过某种类型的同步进行检查。数据库倾向于通过对行或表的内部锁定来为您处理。

5) 为什么程序员倾向于认为 Web 开发不是 “犹太洁食”同时认为他们可以轻松做到这一点? (无需回答 这个但那个事实现在让我很生气,虽然我知道它曾经是 我也一样)

我确信那些不知道如何进行网页设计(尤其是服务器端)的人认为这一切都只是输入 word 文档。一旦你这样做了,你就会意识到它的工作量很大。

【讨论】:

  • 我实际上也有相关问题stackoverflow.com/questions/11425374/… 所以我在这里得到的是,Django 框架没有指定它是执行请求处理的进程还是线程,而是外部容器将决定使用什么方法。这与基于 JAVA 的容器不同。
  • @zinking:您将 django 与 java 中的什么进行比较? Django 本身是一个 Web 框架,而不是服务器。您将通过一个应用程序服务器运行它,该服务器将决定它是单进程服务还是多进程服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多