看看这个伪代码:
$b = SELECT balance FROM accounts WHERE user='john'
$b -= 10
UPDATE account SET balance=$b WHERE user='john'代码从约翰的银行账户中提取了10美元。但是,如果您不使用事务或互斥对象,并且代码同时运行两次,那么余额最终只会减少10,而不是20。
但是由于代码运行得非常快,所以风险很低。这也是一个糟糕的例子,因为这两个查询可以组合成一个:UPDATE account SET balance=balance-10 WHERE user='john'
因此,即使您完全忽略事务,错误发生的风险也很低。
我想知道WordPress是否真的冒了这个险?我搜索了源代码,找不到任何事务,也找不到任何排他性锁,比如文件锁。
我还看到有人写了一个名为WP_锁定的库。在自述中,它说:
因为WordPress不是线程安全的
我想他的意思和我一样。
Does WordPress同时正确地处理请求,还是仅仅承担风险?
这里有一个Apache安装,我验证了如果有两个HTTP请求,两个PHP文件可以同时(同时)运行。每个请求都有自己的过程。
(我想补充一点,原子性也是个问题。例如,如果您有两个INSERT查询,并且在第一个查询之后出现电源中断,那么它将使DB变得不一致。)
发布于 2023-05-10 18:48:55
https://wordpress.stackexchange.com/questions/415953
复制相似问题