在我开始进行网络编程之前,我认为这很容易。现在,经过一年的经验,我认为它真的很难,主要是因为并发问题。
因为这是一个非常意外的发现,我试图向我的经验丰富的朋友(他们制作了一些应用程序,如电子商店等)提出这个问题。具体来说,我问他们是否真的有你需要解决的并发问题,否则你就会面临数据变得不一致的危险,他们就像是:“嗯,从没想过”。这让我有点害怕我的理智,甚至一些令人筋疲力尽的网络搜索已经有说服力地回答了这个问题。
因此,在这里,我要确保我的思想轨道不会导致一个非常白色的房间:
1)假设LAMP框架,apache运行的两个php脚本是否有可能以任何可能的方式重叠执行?
2)同一个脚本是否可能同时运行多次,其实例以任何可能的方式重叠?
3)LAMP的选择是重要的,还是像今天使用的任何网络开发环境一样适用?
4)如果并发确实是一个问题而且我不仅仅是在制造问题,那么是否有任何理论可以帮助我解决它并解决这些问题:“嘿看,有一个可能的并发问题“并且过了一会儿:”嘿,这是X的典型例子,可以通过这种方式解决“。5)为什么程序员倾向于将Web开发视为不是“犹太教”而他们认为可以轻松实现? (没有必要回答这个问题,但这个事实让我感到愤怒,而我知道它曾经和我一样)
我知道,从堆栈溢出的角度来看,这可能是一个多样的一般性问题,但我没有人真正体验过我可以提供帮助。
答案 0 :(得分:3)
我并不认为保护共享资源的原则在Web应用程序和标准桌面程序之间存在太大差异。资源是资源,除非您专门阻止多个实例,否则应用程序可以多次运行。
1)假设LAMP框架,是否有可能运行两个PHP脚本 apache以任何可能的方式重叠执行?
是。 Apache可以在线程/进程中运行请求。两个PHP脚本请求可以同时运行。
2)是否可以在同一个脚本上运行多次 它的实例同时以任何可能的方式重叠?
是。 Apache可以在线程/进程中运行请求。两个PHP脚本请求可以同时运行。
3)LAMP的选择很重要,或者同样的事情也适用 今天使用的任何网络开发环境?
Apache具有在多个线程中运行请求的方法。还有其他服务器使用异步方法。无论哪种方式,您都不应该依赖Web服务器来防止代码中的并发操作。您的代码负责检查资源。
4)如果并发真的可能是一个问题,我不仅仅是制作 事情,是否有任何理论可以帮助我包裹我的头脑 在它周围解决这些问题:“嘿看,有一个 可能的并发问题“并且过了一会儿:”嘿,这是一个经典 X的例子,可以用这种方式解决“。
这实际上取决于代码的资源以及您正在分享的内容。如果脚本例如需要使用文件系统,那么您的代码应该通过某种类型的同步进行检查。数据库倾向于通过内部锁定到行或表来处理它。
5)为什么程序员倾向于将Web开发视为不存在 “kosher”虽然认为他们可以轻松地做到这一点? (无需回答 但是这个事实让我很生气,而我知道它曾经是 和我一样)
我相信不知道如何进行网页设计的人(尤其是服务器端)认为只需输入word文档即可。一旦你这样做,你就会意识到它的很多工作。