Web应用程序中的并发问题

时间:2012-07-14 22:22:36

标签: concurrency lamp

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

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

因此,在这里,我要确保我的思想轨道不会导致一个非常白色的房间:

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

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

3)LAMP的选择是重要的,还是像今天使用的任何网络开发环境一样适用?

4)如果并发确实是一个问题而且我不仅仅是在制造问题,那么是否有任何理论可以帮助我解决它并解决这些问题:“嘿看,有一个可能的并发问题“并且过了一会儿:”嘿,这是X的典型例子,可以通过这种方式解决“。

5)为什么程序员倾向于将Web开发视为不是“犹太教”而他们认为可以轻松实现? (没有必要回答这个问题,但这个事实让我感到愤怒,而我知道它曾经和我一样)

我知道,从堆栈溢出的角度来看,这可能是一个多样的一般性问题,但我没有人真正体验过我可以提供帮助。

1 个答案:

答案 0 :(得分:3)

我并不认为保护共享资源的原则在Web应用程序和标准桌面程序之间存在太大差异。资源是资源,除非您专门阻止多个实例,否则应用程序可以多次运行。

  

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

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

  

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

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

  

3)LAMP的选择很重要,或者同样的事情也适用   今天使用的任何网络开发环境?

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

  

4)如果并发真的可能是一个问题,我不仅仅是制作   事情,是否有任何理论可以帮助我包裹我的头脑   在它周围解决这些问题:“嘿看,有一个   可能的并发问题“并且过了一会儿:”嘿,这是一个经典   X的例子,可以用这种方式解决“。

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

  

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

我相信不知道如何进行网页设计的人(尤其是服务器端)认为只需输入word文档即可。一旦你这样做,你就会意识到它的很多工作。