2010-01-13 89 views
2

我已经读过PHP“可能”的弱点是它如何处理“并发”。只有会话和cookies来保存用户状态的跟踪,怎样才能PHP高精度处理以下情况:PHP为“高流量”网站

  1. 多个用户签出与只有1库存股票一个项目(语法错误对不起,但你很可能找到一些图片)

  2. 多个用户使用相同的登录信息

  3. 多个用户编辑在同一时间同一图像(虽然这种情况很少在现实情况登录到同一用户帐户生活)

,或者需要多线程处理

(我很抱歉,如果我在这里滥用条款)

+4

如何这只是PHP的限制 - 这是在计算机科学领域的共同问题。 – 2010-01-13 02:59:20

+0

不java有类处理线程,锁,信号等? PHP有这些吗? (如果它们存在,还没有真正发现它们) – yretuta 2010-01-13 03:01:25

+0

否 - 但它可以访问memcached(可以模拟互斥/信号量)和数据库。 竞争条件和锁定可以在许多层解决,包括PHP,数据库和缓存。 – 2010-01-13 03:05:23

回答

4

的责任移除这些都不是真正的并发问题。虽然PHP作为一种环境确实缺乏线程能力,但任何使用PHP模块的Web服务器都会有多个线程,每个线程都有自己的活动PHP环境,它们都使用相同的资源。您将遇到Java,.Net,Perl或任何其他Web应用程序语言的这些问题。

  1. 您需要在您的数据库上有一个事务,可能带有写锁定,以便其他用户无法读取它并在别人正在签出时运行结帐过程。这不是一个语言线程问题,它是一个数据库事务问题。
  2. 这也不是线程问题。会话对于所有可用的工具来说都是微不足道的,我从来没有听说过任何语言平台上的“每个会话都有一个线程”的实施方式(这将是不平凡的,难以实施的,并且会增加开销)。您可以允许多个会话令牌对于一个帐户处于活动状态(用户可以在不同的选项卡或Web浏览器上多次登录(如果他们需要的话),或者您不会)(每次发生登录过程时都会清除所有会话令牌,一个令牌处于活动状态)。
  3. 很奇怪,但我不确定线程​​是如何适合这里的。图像编辑必须在浏览器中完成客户端。你不能让任何语言的“线程”对用户的浏览器保持开放...... HTTP不能像那样工作。你会发送他们的形象,你完成了,直到他们击中“保存”并将其发回。如果您担心用户覆盖对方的更改,那么您只需将事务锁定在其上。我可能只是“版本”每个图像,如果一个用户发生更新而另一个用户正在编辑它,则会通知其他用户他们需要刷新其副本。

据我所知,没有语言使用线程来完成任何这些任务。由于HTTP通讯的无状态特性,饼干会话的网络语言的中流砥柱,所以无论你使用什么平台,你会看到很多在所有这些相同的策略来处理一个给定的问题。

5

这些不一定是PHP的问题,任何其他交易。鉴于任何选择的技术,这些都是开发人员需要克服的问题。

  1. 让他们的库存达到1的用户不是PHP的错。当有人已经将它添加到购物车时,你可以暂时忽略这个1,如果它们在会话过期之前没有购买它,就可以将其释放。
  2. 好吗?您可以注销其他用户或管理所有会话。
  3. 同样,他们可能不会在相同的微型计时器上做它。如果他们这样做,抛出一个很好的错误,并要求他们再试一次。正如在评论中指出的那样,MySQL有足够的能力来处理这些类型的事件(如果它们发生的话)。
+2

不要忘记你的数据库可以做交易和锁定,对于那些需要110%确定没有任何事情发生的情况。 – 2010-01-13 03:04:30

0

就像所有语言一样,您需要找到某种方式来锁定这些文件。如果你并不熟悉并发性,你可能会从here开始,并对可用的不同方法进行一些研究。

但我真正的问题是这是否真的会成为一个问题。如果你将要进入一个高并发系统,碰撞情况下的损害有多高。如果碰撞的成本非常高,那么可能会将工作外包给已经切断牙齿的人,只是看他们使用的方法。

1
  1. 你的数据库应该原子处理事务,并删除最后一个项目,从PHP
0

你有没有听说过数据库事务?正确使用,这些可以解决您的所有问题(顺便说一句,这不是PHP的问题)。

0

如果你的问题是关于交易,那么答案是肯定的,但它不是语言本身的特点。交易安全是数据库层的任务(通常是像MySQL这样的关系数据库)。

但是,如果我看了你的问题,如“PHP是可扩展的?”,那么答案也是肯定的。

PHP处理“并发”只是尽可能完美,因为它完全隐藏来自应用程序,这是Web应用程序是一件好事任何并发相关细节。它使应用程序具有固有的可扩展性,就像HTTP使“web”可扩展一样。 HTTP是无状态的,因此PHP在某种意义上是无状态的。这容易实现横向可伸缩性,例如通过添加更多硬件而不改变应用程序代码(虽然这仍然需要一些应用程序支持)。

查阅这些greatarticles一个解释。