如何在PHP脚本中处理共享资源

时间:2012-10-02 09:56:39

标签: php

请原谅PHP中的问题是否过于基本。 我是桌面应用程序开发人员,所以不确定,

就像我们把锁,同步或使用不同语言的关键部分一样,通过多个线程访问一些公共资源。我的假设是正确的,如果几个不同的客户端同时访问脚本(php)将在多个线程中处理?如果他们正在更新公共记录,他们需要一些同步吗?

如何在Php中完成?

在我的情况下,PHP页面可能有多个Android客户端访问它,并可能修改/访问相同的记录或表行。

3 个答案:

答案 0 :(得分:5)

PHP是显式单线程的,每次调用PHP脚本都将由其自己的服务器线程/进程处理。

同时更新记录必须由底层数据库层处理。例如,MySQL被广泛使用并且线程安全。使用事务时,您还可以保证其他级别的原子性。

答案 1 :(得分:2)

使用DBMS(您所做的)时,那个负责数据一致性。特别是在阅读时,无论如何都没有问题,因为只有在某些事情被修改时才会出现问题。如果您不确定,请在写作时使用交易。

答案 2 :(得分:1)

如果您正在谈论访问服务器,那么它取决于服务器是否具有线程(Apache不是,nginx等等)并且与PHP本身无关(没有线程化)。< / p>

无论哪种方式,如果你在谈论MySQL,那么它是一个不同的故事,因为MySQL工作在每个连接会话(像CURRENT_TIMESTAMPLAST_INSERT_ID()之类的东西取决于连接,而不是数据库作为一个整个)。所以,如果你有这样的事情:

//some insert query
$stmt->execute();
$id = $connection->insert_id;
$stmt2->execute($id);

...它是“安全的”,因为即使在执行单个stmt之前多次执行第一个stmt2,ID仍然是正确的,因为连接是相同的。