2

如果在 PHP 中这是一个太基本的问题,请原谅。我是桌面应用程序开发人员,所以不确定,

就像我们在不同的语言中加锁、同步或使用临界区来让多个线程访问一些公共资源一样。我的假设是否正确,如果多个不同的客户端同时访问一个脚本(php)将在多个线程中处理?如果他们正在更新一个共同的记录,他们需要一些同步吗?

它是如何在 PHP 中完成的?

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

4

3 回答 3

5

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

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

于 2012-10-02T10:01:42.463 回答
2

使用 DBMS(您所做的)时,该数据库负责数据一致性。尤其是在阅读时无论如何都没有问题,因为只有在修改某些内容时才会出现问题。如果您不确定,请在编写时使用事务。

于 2012-10-02T10:02:00.657 回答
1

如果您正在谈论访问服务器,那么它取决于服务器是否是线程化的(Apache 不是,nginx 是等),这与 PHP 本身(不是线程化的)无关。

无论哪种方式,如果您谈论的是 MySQL,那么情况就不同了,因为 MySQL 在每个连接会话中工作(例如CURRENT_TIMESTAMPLAST_INSERT_ID()取决于连接,而不是整个数据库)。所以如果你有这样的事情:

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

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

于 2012-10-02T10:04:10.243 回答