php代表;“高流量”;网站

php代表;“高流量”;网站,php,Php,我已经读到PHPs“可能”的弱点是它如何处理“并发性”。由于只有会话和cookie可以跟踪用户状态,PHP如何高精度地处理以下情况: 多个用户使用一个只有一个库存的物品结账(很抱歉,语法错误,但您已经大致了解了情况) 多个用户使用相同的登录详细信息登录到同一用户帐户 多个用户同时编辑同一个图像(尽管这在现实生活中很少发生) 或任何其他需要多线程处理的事务 (如果我在这里误用了术语,我深表歉意)这些对PHP来说不一定是问题。考虑到所选择的任何技术,这些都是开发人员需要克服的问题 用户让他们的库存达

我已经读到PHPs“可能”的弱点是它如何处理“并发性”。由于只有会话和cookie可以跟踪用户状态,PHP如何高精度地处理以下情况:

  • 多个用户使用一个只有一个库存的物品结账(很抱歉,语法错误,但您已经大致了解了情况)

  • 多个用户使用相同的登录详细信息登录到同一用户帐户

  • 多个用户同时编辑同一个图像(尽管这在现实生活中很少发生)

  • 或任何其他需要多线程处理的事务


    (如果我在这里误用了术语,我深表歉意)

    这些对PHP来说不一定是问题。考虑到所选择的任何技术,这些都是开发人员需要克服的问题

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

  • 就像所有语言一样,您需要找到某种方法来锁定这些文件。如果您是并发的新手,您可能会开始研究可用的不同方法

    但我真正的问题是这是否真的会成为一个问题。如果您要在一个高并发系统中,那么在发生冲突的情况下,损害有多大。如果碰撞的成本真的很高,那么可能是将工作外包给已经在这方面切牙的人,看看他们使用了什么方法

  • 您的数据库应该以原子方式处理事务,并删除最后一项,将其从php的责任中删除

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

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

  • 就我所知,没有任何语言使用线程来完成这些任务。由于HTTP通信的无状态性质,Cookie是会话,是每种web语言的主流,因此无论您使用何种平台,您都会在所有这些语言中看到处理给定问题的相同策略。

    您听说过数据库事务吗?如果使用得当,它们可以解决您的所有问题(顺便说一句,这些问题不是PHP问题)。

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

    但是如果我读到你的问题,比如“PHP是可伸缩的吗?”,那么答案也是肯定的

    PHP尽可能完美地处理“并发”,因为它对应用程序完全隐藏了任何与并发相关的细节,这对于web应用程序来说是一件好事。它使应用程序具有内在的可伸缩性,就像HTTP使“web”具有可伸缩性一样。HTTP是无状态的,所以PHP在某种意义上是无状态的。这允许轻松的横向可伸缩性,例如,在不更改应用程序代码的情况下添加更多硬件(尽管这仍然需要事先提供一些应用程序支持)


    查看这些说明。

    这仅仅是PHP的一个限制吗?这些是计算机科学领域的常见问题。java没有线程处理、锁、信号量等类吗?PHP有这些吗?(如果它们存在的话,还没有真正发现)没有-但是它可以访问memcached(您可以模拟互斥/信号量)和数据库。竞争条件和锁定可以在很多层上解决,包括PHP、DB和缓存。不要忘记,您的DB也可以进行事务和锁定,在这些情况下,您需要110%确定同时不会发生任何事情。