如果在 PHP 中这是一个太基本的问题,请原谅。我是桌面应用程序开发人员,所以不确定,
就像我们在不同的语言中加锁、同步或使用临界区来让多个线程访问一些公共资源一样。我的假设是否正确,如果多个不同的客户端同时访问一个脚本(php)将在多个线程中处理?如果他们正在更新一个共同的记录,他们需要一些同步吗?
它是如何在 PHP 中完成的?
在我的情况下,一个 PHP 页面可能有多个 android 客户端访问它,并可能修改/访问相同的记录或表行。
如果在 PHP 中这是一个太基本的问题,请原谅。我是桌面应用程序开发人员,所以不确定,
就像我们在不同的语言中加锁、同步或使用临界区来让多个线程访问一些公共资源一样。我的假设是否正确,如果多个不同的客户端同时访问一个脚本(php)将在多个线程中处理?如果他们正在更新一个共同的记录,他们需要一些同步吗?
它是如何在 PHP 中完成的?
在我的情况下,一个 PHP 页面可能有多个 android 客户端访问它,并可能修改/访问相同的记录或表行。
PHP 是显式单线程的,对 PHP 脚本的每次调用都将由其自己的服务器线程/进程处理。
同时更新记录必须由底层数据库层处理。例如 MySQL 被广泛使用并且线程安全。使用事务时,您还可以保证其他级别的原子性。
使用 DBMS(您所做的)时,该数据库负责数据一致性。尤其是在阅读时无论如何都没有问题,因为只有在修改某些内容时才会出现问题。如果您不确定,请在编写时使用事务。
如果您正在谈论访问服务器,那么它取决于服务器是否是线程化的(Apache 不是,nginx 是等),这与 PHP 本身(不是线程化的)无关。
无论哪种方式,如果您谈论的是 MySQL,那么情况就不同了,因为 MySQL 在每个连接会话中工作(例如CURRENT_TIMESTAMP
并LAST_INSERT_ID()
取决于连接,而不是整个数据库)。所以如果你有这样的事情:
//some insert query
$stmt->execute();
$id = $connection->insert_id;
$stmt2->execute($id);
...它是“安全的”,因为即使第一个stmt
在一个被执行之前执行了很多次stmt2
,ID 仍然是正确的,因为连接是相同的。