php为"高流量"网站

yre*_*uta 2 php

我已经读过PHP的"可能"弱点是它处理"并发"的方式.只有会话和cookie来跟踪用户状态,PHP如何高精度地处理以下情况:

  1. 多个用户签出一个项目,库存中只有1个库存(抱歉语法错误,但你已经得到了很多照片)

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

  3. 多个用户同时编辑同一图像(虽然这在现实生活中很少发生)

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

(如果我在这里误用了条款,我道歉)

Sam*_*son 5

这些不一定是PHP的问题.这些是开发人员在选择任何技术时都要克服的问题.

  1. 让他们的库存达到1的用户不是PHP的错.当有人已经将它添加到购物车时,您可以暂时忽略1,如果他们在会话到期之前没有购买它,请将其释放.
  2. 好的?您可以注销其他用户,也可以管理所有会话.
  3. 同样,他们可能不会在相同的微缩时间进行.如果他们这样做了,请抛出一个错误的错误,然后让他们再试一次.正如评论中所指出的,MySQL具有足够的能力来处理这些类型的事件(如果它们发生的话).

  • 并且不要忘记您的数据库也可以执行事务和锁定,对于那些需要110%确定无法同时执行任何操作的情况. (2认同)

zom*_*bat 5

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

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

据我所知,没有语言使用线程来完成任何这些任务。由于 HTTP 通信的无状态特性,cookie 是会话是每种网络语言的支柱,因此无论您使用什么平台,您都会在所有这些平台中看到非常相同的策略来处理给定的问题。