有时我的应用程序需要等待一些东西。例如,在缓存的情况下:如果在缓存中找不到对象,则脚本在其键下设置一个特殊值,表示当前正在计算其值,并在完成后将其写入。如果在计算时另一个客户端请求相同的对象,则脚本不会重新计算它,而只会等待第一个。当然,这是一个简化的解释。我不知道如何正确地做到这一点,但这种行为在我看来是非常合乎逻辑的。
在测试一个完全不同的东西的过程中,今天我遇到了一个问题。
<?php
echo time() . "\n";
sleep(10); // usleep() has the same effect
echo time() . "\n";
同时,我在浏览器中的两个选项卡中打开此页面,并希望看到相同的数字,但是……稍后打开的选项卡,除了延迟之外,出于某种原因,正在等待第一个选项卡延迟(蹩脚的措辞,但你理解我),所以我看到这样的东西:1615749037 1615749047
,1615749047 1615749057
。如果您添加更多选项卡,则下一个选项卡将等待所有以前的选项卡。
它打破了我的大脑。这根本不是我想象中的样子,多年来一直处于这种错觉之中。我目前无法找到有关此的任何信息。首先,我对如何达到预期的结果感兴趣。为什么 sleep() 会这样,我似乎开始猜测,但如果你分享一些信息,我会很高兴。谢谢!
升级版。以防万一,我检查了这个:如果我添加header('Cache-Control: no-cache, no-store, must-revalidate')
,那么对我来说没有任何改变。但是如果我从不同的浏览器打开标签,那就没有问题了。